返回后存储过程删除语句

时间:2015-09-18 17:47:19

标签: sql sql-server stored-procedures

因此,我要跟踪我负责的同步过程中的潜在错误(由其他人编写)。当查看正在调用的存储过程之一时,我注意到一些特殊的东西。根据我对退货的理解,退货后的任何内容都不会退回。但是,如果在SQL中就是这种情况,我不是肯定的。基于下面的SQL块,delete语句是否会运行?或者SP是否返回信息以表示是否删除了行(例如行数,是否成功等)?我假设这是SP中的一个错误,但想要在采取行动之前确认。提前谢谢。

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[DeleteSalesforce_Contacts]
AS
Return
Delete From dbo.Contacts Where IsDeleted = 1

GO

2 个答案:

答案 0 :(得分:2)

The documentation非常清楚:

  

“无条件退出查询或过程。立即返回   并且可以在任何时候用于退出程序,   批处理或语句块。 RETURN后面的语句不是   执行“。

不会执行删除语句。

return语句采用可选参数,但要将查询用作值,您需要在括号中使用select。例如:

return (select top 1 id from SomeTable)

答案 1 :(得分:0)

执行proc时永远不会发生删除。

执行proc时,执行返回后的语句唯一一次是它与goto进程相关并且代码是在那里发送并绕过返回的。这种代码有时曾经在SQL Server中允许使用Try Catch块之前编写以执行错误操作。