2012-05-24 145 views
1

我怎樣才能生成腳本,而不是手動編寫MSSQL腳本數據插入或更新

if exists (select ... where id = 1) 
insert ... 
else 
update ... 

很無聊做,與多條記錄!

使用management studio生成腳本'僅數據'僅生成插入。因此,針對現有的db運行會導致主鍵出錯。

+0

[Atomic UPSERT in SQL Server 2005]可能的重複(http://stackoverflow.com/questions/2522379/atomic-upsert-in-sql-server-2005) –

回答

3

對於SQL 2008年起,你可以開始使用了CTE

一個典型的ID /描述查找表一個簡單的例子沿Merge聲明

WITH stuffToPopulate(Id, Description) 
AS 
(
    SELECT 1, 'Foo' 
    UNION SELECT 2, 'Bar' 
    UNION SELECT 3, 'Baz' 
) 
MERGE Your.TableName AS target 
USING stuffToPopulate as source 
ON (target.Id = source.Id) 
WHEN MATCHED THEN 
    UPDATE SET Description=source.Description 

WHEN NOT MATCHED THEN 
    INSERT (Id, Description) 
    VALUES (source.Id, source.Description); 

合併報表有一堆的其他功能是有用(如NOT MATCHED BY DESTINATIONNOT MATCHED BY SOURCE)。文檔(上面鏈接)會給你更多的信息。