2011-10-31 47 views
1

我在SQL Server表中有一行数据,我将为了测试目的而进行更新。在我更新之前,我想将现有值保存到.SQL文件中,以便在验证代码正常工作后撤消更改(在此场景中回滚不是可行的选项,我想跳过主键,因为它是种子)。是否有可能为一行数据生成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#代码,并覆盖李四数据,然后在完成验证代码正常工作后恢复原始值。我不得不手动输入以前的更新语句。对于拥有大量数据的表格而言,这非常繁琐,并且对于我想要保存的每一行都是这样做的。有谁知道是否可以自动执行此过程,以便将行数据转换为更新语句?

回答

1

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

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

0

你可以写一个SELECT查询,生成你想要的UPDATE语句:

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

注意使用REPLACE逃脱你的VARCHAR列的任何单引号的。

0

您可以创建第二个用户表用于审计目的,或许UserAudit,类似于用户表。审核表还可以根据需要包含编辑日期/时间,用户等的附加列。

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

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

相关问题