Reputation: 1604
Is there any equivalent syntax in SQL Server similar to mysql
REPLACE INTO
[OR]
INSERT INTO ... ON DUPLICATE KEY UPDATE
Ex. query in MySQL
insert INTO supply_data values('1','be','dept','loc','team',4,2015,
1,2,3,4,5,6,7,8,9,10,11,12) on duplicate key update pid=pid and be=be
I am trying to convert this into T-SQL
Upvotes: 0
Views: 69
Reputation: 9345
You can use merge
MERGE supply_data AS t
USING (SELECT '1','be','dept','loc', ...) AS s (pid, be, val_1, val_2, ...)
ON (t.pid = s.pid and t.be = s.be)
WHEN MATCHED THEN
UPDATE SET clm_1 = val_1, clm_2 = s.val_2, ...
WHEN NOT MATCHED THEN
INSERT (pid, be, clm_1, clm_2, ...)
VALUES (pid, be, val_1, val_2, ...)
Try this;
MERGE supply_data AS t
USING (
SELECT 1, 'be','dept','loc','team', 2016,
1, 1, 1, 1,
1, 1, 1, 1,
1, 1, 1, 1
)
AS s (
pid, be, dept, location, team, aopyr,
jansupply, febsupply, marsupply, aprsupply,
maysupply, junsupply, julsupply, augsupply,
sepsupply, octsupply, novsupply, decsupply
)
ON (
t.pid = s.pid and t.be = s.be and
t.location=s.location and t.team=s.team and
t.aopyr=s.aopyr
)
WHEN MATCHED THEN
UPDATE SET
jansupply = s.jansupply, febsupply = s.febsupply,
marsupply = s.marsupply, aprsupply = s.aprsupply,
maysupply = s.maysupply, junsupply = s.junsupply,
julsupply = s.julsupply, augsupply = s.augsupply,
sepsupply = s.sepsupply, octsupply = s.octsupply,
novsupply = s.novsupply, decsupply = s.decsupply
WHEN NOT MATCHED THEN
INSERT (
pid, be, dept, location, team, aopyr,
jansupply, febsupply, marsupply, aprsupply,
maysupply, junsupply, julsupply, augsupply,
sepsupply, octsupply, novsupply, decsupply
)
VALUES (
s.pid, s.be, s.dept, s.location, s.team, s.aopyr,
s.jansupply, s.febsupply, s.marsupply, s.aprsupply,
s.maysupply, s.junsupply, s.julsupply, s.augsupply,
s.sepsupply, s.octsupply, s.novsupply, s. decsupply
)
Upvotes: 1