存儲過程將保存一天。
這裏我假設COL_A和COL_B是唯一的列,並且是INT 的類型!沒有sql-server實例ATM,所以不能保證語法的正確性。 更新!下面是SQLFIDDLE
CREATE TABLE mytable
(
COL_A int UNIQUE,
COL_B int UNIQUE,
COL_C int,
COL_D int,
)
GO
INSERT INTO mytable (COL_A, COL_B, COL_C, COL_D)
VALUES (1,1,1,1),
(2,2,2,2),
(3,3,3,3),
(4,4,4,4);
GO
CREATE PROCEDURE updateDuplicate(@COL_A INT, @COL_B INT, @COL_C INT, @COL_D INT)
AS
BEGIN
DECLARE @ret INT
SELECT @ret = COUNT(*)
FROM mytable p
WHERE p.COL_A = @COL_A
AND p.COL_B = @COL_B
IF (@ret = 0)
INSERT INTO mytable (COL_A, COL_B, COL_C, COL_D)
VALUES (@COL_A, @COL_B, @COL_C, @COL_D)
IF (@ret > 0)
UPDATE mytable SET COL_D = @COL_D WHERE col_A = @COL_A AND COL_B = @COL_B
END;
GO
一個鏈接,然後調用這個過程與所需的值,而不是Update語句
exec updateDuplicate 1, 1, 1, 2
GO
SELECT * from mytable
GO
參見[這個問題](HTTP:// stackoverflow.com/questions/108403/solutions-for-insert-or-update-on-sql-server)尋求幫助。 – Phylogenesis 2014-11-22 10:32:30
這也可以是有用的:http://stackoverflow.com/questions/1197733/does-sql-server-offer-anything-like-mysqls-on-duplicate-key-update – 2014-12-18 09:52:03
你是否需要這種行爲的所有插入,或只是特定的? – StuartLC 2014-12-25 09:48:06