mssql脚本数据插入或更新

时间:2012-05-24 08:01:54

标签: sql-server

如何生成脚本而不是手动编写

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

很多记录都很无聊!

使用management studio生成脚本'仅限数据'仅生成插入。因此,针对现有数据库运行该操作会在主键上产生错误。

2 个答案:

答案 0 :(得分:3)

对于SQL 2008以后,您可以开始使用Merge语句和CTE

典型id / description查找表的简单示例

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)。文档(上面链接)将为您提供更多信息。

答案 1 :(得分:0)

MERGE是最有效的方法之一。
但是,一开始编写Merge语句不是很直观,并且为多行或多表生成行是一个耗时的过程。
我建议使用其中一种工具来简化此挑战:

我最近写了一篇有关这些工具的文章,以及利用SSDT将数据部署到数据库的方法。了解更多:
Script and deploy the data for database from SSDT project

我希望这会有所帮助。