有可能为一行数据生成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更新脚本吗?

我认为不存在像这样更新单行的功能。从技术上讲,你的查询正在更新数据库中的所有行,我不明白为什么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表。审计表还可以根据需要包含用于编辑日期/时间、用户等的附加列。

在执行更改之前,您可以创建更新和删除触发器,将原始数据的副本加上额外的审计字段(用户、操作、日期/时间)写入审计表。

这将在后台自动工作,不需要单独的选择或人工干预。