我想知道你如何使用DELETE
编写一个T-SQL OUTPUT
语句来为你删除的那些行吐出INSERT
语句(作为将来的回滚计划)而不是简单地输出被删除的行。
通用示例或代码段将被投票。
将包含此语句(例如使用BCP)的INSERT
语句整体包含在语句中作为答案。
服务器是SQL Server 2008R2
谢谢
答案 0 :(得分:1)
如果我理解你的问题,你想要的是创建一个带有insert语句的文件,这些语句可以撤消删除。如果这样做的一种方法应该是这样的:
-- set up some test data
DECLARE @table1 TABLE (id INT, name VARCHAR(32))
INSERT INTO @table1 VALUES (1, 'Fred'),(2, 'Tom'),(3, 'Sally'),(4, 'Alice')
-- drop and create a temporary table to hold the statements to output
IF OBJECT_ID('TempOutputTable', 'U') IS NOT NULL
DROP TABLE TempOutputTable
CREATE TABLE TempOutputTable (SqlStatement VARCHAR(MAX))
-- delete a couple of rows from @table1
DELETE FROM @table1
OUTPUT 'INSERT table1 (id, value) VALUES (' + CAST(deleted.id AS VARCHAR(10)) + ', ''' + deleted.name + ''')' AS SqlStatement
INTO TempOutputTable
WHERE id = 4 OR id = 2
-- export using bcp
DECLARE @SqlCommand sysname
SELECT @SqlCommand = 'bcp "select * from test.dbo.TempOutputTable" queryout D:\mytest.txt -c -T'
EXEC xp_cmdshell @SqlCommand, NO_OUTPUT
-- remove the temporary table
DROP TABLE TempOutputTable
运行此文件后,D:\mytest.txt
文件将包含以下内容:
INSERT table1 (id, value) VALUES (2, 'Tom')
INSERT table1 (id, value) VALUES (4, 'Alice')
这假定xp_cmdshell
已启用(能够运行bcp),当然您必须根据需要调整insert语句。