我在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数据,然后在我完成验证我的代码工作后恢复它的原始值。我不得不手动输入上一个更新语句。对于包含大量数据的表而言,这非常繁琐,并且对于我想要保存的每一行都要这样做。有谁知道是否可以自动化这个过程,以便可以将行的数据转换为更新语句?
答案 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表。审计表还可以根据需要包含编辑日期/时间,用户等的其他列。
然后,您可以创建更新和删除触发器,在执行更改之前写入原始数据的副本以及审计表中的其他审计字段(用户,操作,日期/时间)。
这将在后台自动运行,不需要单独选择或手动干预。