在 SQL Server 中为特定表生成 UPDATE 语句

car*_*osm 3 sql-server

我想知道是否有一种工具可以UPDATE根据已插入表中的数据生成语句。我知道有MERGE声明,但我想知道我是否可以通过其他方式做到这一点。我正在使用 SQL Server 2014

假设我有一个 TableA:

Id int,
Name nvarchar(50),
Description nvarchar(100),
Active bit
Run Code Online (Sandbox Code Playgroud)

然后我的 TableA 有这个记录和更多:

Id   Name       Description   Active
1    blablabla  sdjfhksj      1
Run Code Online (Sandbox Code Playgroud)

我想为此表上的每一行创建更新语句

Update TableA
   set Name = 'blablabla',
       Description = 'sdjfhksj',
       Active = 1
 where Id = 1
Run Code Online (Sandbox Code Playgroud)

Tho*_*s G 10

一种快速、简单且有效的解决方案是使用 SQL 语句生成脚本。

SELECT ('UPDATE thetable SET 
          Name=''' + Name + ''', 
          Description =''' + REPLACE(Description, CHAR(39), CHAR(39)+CHAR(39))  + ''', 
          Active  =' + Active + ';
       ')  AS update_statement
FROM TableA
Run Code Online (Sandbox Code Playgroud)

添加您的WHERE子句以过滤脚本中所需的行

诀窍是正确处理数据中的单引号(又名CHAR(39))。

我认为您的Description列可能包含单引号,所以我用 aREPLACE()将它们加倍,因此当您抛出结果 SQL 指令时,它的包含将被正确转义。对可能包含单引号的所有字段执行相同的技巧


Jos*_*ons 1

您想解决什么问题?

INSERT 会起作用吗?看看这个问题的答案

具体来说:

Right-click on the database and go to Tasks > Generate Scripts.
Select the tables (or objects) that you want to generate the script against.
Go to Set scripting options tab and click on the Advanced button.
In the General category, go to Type of data to script
There are 3 options: Schema Only, Data Only, and Schema and Data. Select the appropriate option and click on OK.
Run Code Online (Sandbox Code Playgroud)

然后,您将直接从 SSMS 中获取数据的 CREATE TABLE 语句和所有 INSERT 语句。