有可能为一行数据生成SQL更新脚本吗?
本文关键字:SQL 更新 脚本 数据 一行 有可能 | 更新日期: 2023-09-27 18:12:48
我在SQL Server表中有一行数据,我要更新它以进行测试。在我更新它之前,我想把现有的值保存到一个。sql文件中,这样我就可以在我验证代码正常工作后撤销我的更改(回滚在这种情况下不是一个可行的选择,我想跳过主键,因为它是种子)。
下面是我的表结构:
CREATE TABLE [User]
[ID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[Name] [varchar](255) NOT NULL,
[Address] [varchar](255) NOT NULL,
[City] [varchar](100) NOT NULL,
[State] [varchar](100) NOT NULL,
[ZipCode] [varchar](100) NOT NULL,
PRIMARY KEY CLUSTERED WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
给定这个结构,我的插入看起来像这样:
UPDATE [User] SET
[Name] = 'John Doe',
[Address] = '132 Test Road',
[City] = 'Anytown',
[State] = 'TS',
[ZipCode] = '12345'
正如你所看到的,我可以运行我的c#代码并覆盖John Doe数据,然后在我完成验证代码工作后恢复它的原始值。我必须手动输入之前的更新语句。对于包含大量数据的表来说,这是非常繁琐的,并且对于我想要保存的每一行都要这样做。有人知道是否有可能自动化这个过程,以便一行的数据可以转换为更新语句吗?
我认为不存在像这样更新单行的功能。从技术上讲,你的查询正在更新数据库中的所有行,我不明白为什么SQL Server管理工作室会实现这样的工具。
但是,您可以转到Database > Tasks > Generate Scripts
并创建查询以再次插入记录
您可以编写一个SELECT查询来生成您想要的UPDATE语句:
SELECT
'UPDATE [User] SET [Name] = ' +
'''' + REPLACE(Name, '''', '''''') + '''' +
', [Address] = ' +
'''' + REPLACE(Address, '''', '''''') + '''' +
... etc with remaining columns
FROM [User]
WHERE [User].ID = ...
注意使用REPLACE转义VARCHAR列中的任何单引号。
您可以为审计目的创建第二个用户表,也许是UserAudit,类似于user表。审计表还可以根据需要包含用于编辑日期/时间、用户等的附加列。
在执行更改之前,您可以创建更新和删除触发器,将原始数据的副本加上额外的审计字段(用户、操作、日期/时间)写入审计表。
这将在后台自动工作,不需要单独的选择或人工干预。