2012-09-25 138 views
-1

可能重複:
Solutions for INSERT OR UPDATE on SQL Server
Only inserting a row if it's not already there使用Case語句要麼插入表或更新現有行

我的標題幾乎說明了什麼,我試圖做,但我會詳細介紹一下。在創建存儲過程時,首先檢查它是否已經存在(通過比較兩個參數),如果存在,它將更新行中的特定列,並且如果該行不存在,會在表格中插入一個新行。

BEGIN 
SELECT 
(
CASE WHEN [Site] = @site and Plant = @plant 
then 
UPDATE [Status] 
FROM Server_Status 
WHERE [Site] = @site 
ELSE 
Insert into Server_Status(Name, [Path], [Site], Plant, [Status]) 
Values (@name, @path, @site, @plant, @status) 
end 
) 
FROM Server_Status 
END 

是我到目前爲止,但沒有工作(顯然)。有沒有人比我有更多的SQL知識有什麼建議?

-J

+2

[案例不是流控制方法](http://msdn.microsoft.com/en-us/library/ms181765.aspx)SQL Server的哪個版本? –

+1

您還需要修復您的'UPDATE'聲明需要在'UPDATE MyTable的SET的形式MyField的= ...' – JonH

+0

的Microsoft SQL Server 2008 – Brandon

回答

3

您可能要請看看MERGE (Transact-SQL)聲明。

對目標表執行基於 的對源表的連接結果的插入,更新或刪除操作。例如,您可以通過 插入,更新,或基於其他表中找到的差異在一個 表中刪除的行同步兩個表。

3

你可以這樣做:

IF EXISTS(SELECT * FROM MyTable WHERE...) 
--value exists perform update 
    BEGIN 
    UPDATE... 
    END 
ELSE 
    --value doesnt exist perform insert 
    BEGIN 
    INSERT ... 
    END 
1

你應該先檢查使用IF行的存在EXISTS聲明如下:

IF EXISTS (SELECT * FROM Server_Status WHERE Site = @Site) 
BEGIN 
    -- UPDATE statement. 
END 
ELSE 
    -- INSERT statement. 
END 
+1

更新聲明未正確形成。你在更新什麼? – JonH

+1

我剛剛從他的SELECT中複製:)。這個想法是驅動IF EXISTS語句的用法。 – Vikdor