存储过程 - 返回结果而不执行

时间:2018-01-11 22:17:04

标签: sql-server sql-server-2008

我想为MS SQL Server 2008编写一个存储过程来删除表中的行...但是如果提供了某个参数,它将显示如果当时正常运行将被删除的内容,而不是实际删除。

为了返回要删除的内容,我当然可以将要删除的所有内容复制到临时表中并返回表格。

但是有内置功能可以实现这个功能吗?

我知道执行计划可能有助于调试,但我没有在文档中看到任何接近这样做的内容(请参阅esp herehere,也是问题和答案{ {3}})

2 个答案:

答案 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