【问题标题】:Stored procedure - return results without executing存储过程 - 返回结果而不执行
【发布时间】:2018-06-21 08:26:33
【问题描述】:

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

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

但是是否有允许该功能的内置函数?

我知道执行计划对调试很有帮助,但我在文档中看不到任何接近这样做的内容(请参阅 esp herehere,还有 SO 问题和答案 here

【问题讨论】:

  • 所以您想要一个返回选择查询结果或执行删除的过程?这有点奇怪,但不是什么大不了的事。

标签: sql-server sql-server-2008


【解决方案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

【讨论】:

    【解决方案2】:

    一种方法是为此创建三个程序。一个是“驱动程序”程序,它决定执行哪个程序。这很重要,因为当有多个执行路径时,执行计划可能是一个真正的问题。您可以在此处更深入地了解性能影响。 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
    

    【讨论】:

      猜你喜欢
      • 2016-02-01
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多