2011-02-08 71 views
1

在線閱讀一些東西,在這裏,但現在困惑。我想要做的是一個簡單的插入...但如果記錄已經存在,我想更新它,而這是如何最好地在MS sqlserver中實現?sqlserver如何做插入,但如果它存在更新而不是操縱?

這裏是插入一個簡單的例子:

INSERT INTO AdvertiserCategoryJoin 
        (AdvertiserID, CategoryID) 
VALUES  (502910, 2) 

我試圖對重複鍵使用,但SQLSERVER沒有等價物,這是煩人,那麼什麼是這樣做的最佳途徑?

回答

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命令,它正是你想要的。

+0

我選擇了這個選項,工作,和我的理解:)感謝。 – flavour404 2011-02-08 02:30:27

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; 
相關問題