【问题标题】:mssql script data insert or updatemssql 脚本数据插入或更新
【发布时间】:2012-05-30 19:09:37
【问题描述】:

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

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

处理很多记录很无聊!

使用 management studio 生成脚本“仅数据”仅生成插入。因此,针对现有数据库运行它会导致主键出错。

【问题讨论】:

标签: sql-server


【解决方案1】:

对于 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);

Merge 语句还有许多其他有用的功能(例如NOT MATCHED BY DESTINATIONNOT MATCHED BY SOURCE)。文档(上面链接)将为您提供更多信息。

【讨论】:

    【解决方案2】:

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

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

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      相关资源
      最近更新 更多