在线阅读一些内容,但现在感到困惑。我想要做的是一个简单的插入......但如果记录已经存在,我想更新它,如何在ms sqlserver中实现最佳效果?
以下是插入的简单示例:
INSERT INTO AdvertiserCategoryJoin
(AdvertiserID, CategoryID)
VALUES (502910, 2)
我试图使用ON DUPLICATE KEY但sqlserver没有等效的,这很烦人,所以最好的方法是什么?
答案 0 :(得分:0)
您始终可以使用IF..ELSE条件。
IF (SELECT COUNT(*) FROM AdvertiserCategoryJoin WITH(NOLOCK) WHERE AdvertiserID = 502910) = 1 BEGIN
UPDATE AdvertiserCategoryJoin
SET CategoryID = 2
WHERE AdvertiserID = 502910
END ELSE BEGIN
INSERT INTO AdvertiserCategoryJoin
(AdvertiserID, CategoryID)
VALUES (502910, 2)
END
但是还有其他方法可以做到这一点,使用EXCEPT或EXISTS。这取决于您和您发现更容易编写/维护的内容,并且如果您使用的是SQL 2008并且面临挑战,您可以使用MERGE命令,它可以完全按照您的意愿执行操作。
答案 1 :(得分:0)
假设你有SQL2008版本,那就有一个非常好的声明。 MERGE
MERGE AdvertiserCategoryJoin AS target
USING (SELECT @AdvertiserID, @CategoryID) AS source (AdvertiserID, CategoryID)
ON (target.AdvertiserID = source.AdvertiserID)
WHEN MATCHED THEN
UPDATE SET CategoryID = source.CategoryID
WHEN NOT MATCHED THEN
INSERT (AdvertiserID, CategoryID)
VALUES (source.AdvertiserID, source.CategoryID)
OUTPUT deleted.*, $action, inserted.* INTO #MyTempTable;