我想为MS SQL Server 2008编写一个存储过程来删除表中的行...但是如果提供了某个参数,它将显示如果当时正常运行将被删除的内容,而不是实际删除。
为了返回要删除的内容,我当然可以将要删除的所有内容复制到临时表中并返回表格。
但是有内置功能可以实现这个功能吗?
我知道执行计划可能有助于调试,但我没有在文档中看到任何接近这样做的内容(请参阅esp here和here,也是问题和答案{ {3}})
答案 0 :(得分:1)
一种方法是为此创建三个程序。一个是"驱动程序"决定执行哪个程序的程序。这很重要,因为当存在多个执行路径时,执行计划可能是一个真正的问题。您可以在此深入了解性能影响。 http://sqlinthewild.co.za/index.php/2009/09/15/multiple-execution-paths/
这样的事情对你有用。
create procedure MyProc
(
@DeleteData bit
) as
if @DeleteData = 1
exec MyDeleteProc
else
exec MySelectProc
答案 1 :(得分:1)
您可以按照下面给出的T-SQL进行操作,我使用的是样本表TABLE1
,需要删除记录。
子句OUTPUT Deleted.*
是一个标准的SQL Server功能,它将自动返回所有被删除的行。
自动显示所有要删除的行
--boolean parameter that tells whether to just show rows being deleted
--OR to actually delete the rows
DECLARE @delete BIT = 0;
BEGIN TRAN
DELETE FROM TABLE1
OUTPUT DELETED.*;
IF @delete = 0
BEGIN
ROLLBACK TRAN
END
ELSE
BEGIN
COMMIT TRAN
END