2012-05-24 153 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)。文档(上面链接)会给你更多的信息。