是否可以为一行数据生成SQL更新脚本?

时间:2011-10-31 16:48:23

标签: c# sql sql-server

我在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数据,然后在我完成验证我的代码工作后恢复它的原始值。我不得不手动输入上一个更新语句。对于包含大量数据的表而言,这非常繁琐,并且对于我想要保存的每一行都要这样做。有谁知道是否可以自动化这个过程,以便可以将行的数据转换为更新语句?

3 个答案:

答案 0 :(得分:1)

我认为没有像这样更新单行的功能。从技术上讲,您的查询正在更新数据库中的所有行,我不明白为什么SQL Server Management Studio会实现这样的工具。

但是,您可以转到Database > Tasks > Generate Scripts并创建查询以再次插入记录。

答案 1 :(得分:0)

您可以编写SELECT查询以生成所需的UPDATE语句:

SELECT
   'UPDATE [User] SET [Name] = ' +
   '''' + REPLACE(Name, '''', '''''') + '''' + 
   ', [Address] = ' + 
   '''' + REPLACE(Address, '''', '''''') + '''' + 
   ... etc with remaining columns
FROM [User]
WHERE [User].ID = ... 

请注意使用REPLACE转义VARCHAR列中的任何单引号。

答案 2 :(得分:0)

您可以为审计目的创建第二个用户表,可能是UserAudit,类似于User表。审计表还可以根据需要包含编辑日期/时间,用户等的其他列。

然后,您可以创建更新和删除触发器,在执行更改之前写入原始数据的副本以及审计表中的其他审计字段(用户,操作,日期/时间)。

这将在后台自动运行,不需要单独选择或手动干预。