TSQL RETURN语句不会停止批处理执行

时间:2015-03-22 09:00:15

标签: sql-server tsql return

从联机丛书中,RETURN语句定义为:

  

无条件退出查询或过程。 RETURN是立即完成的,可以在任何时候用于退出程序,批次或语句块。不执行RETURN之后的语句。

请注意,它可以停止batch。但是,我的测试不符合这一点。以下是我的测试代码。

IF DATABASEPROPERTYEX(N'data', N'Version') IS NULL
    RETURN;

USE data;

我选择此代码并在SQL Server Management Studio中运行它。结果是:

  

Msg 911,Level 16,State 1,Line 13
  数据库'数据'不存在。确保正确输入名称。

据我所知,由于我的代码不包含GO,所以它应该只在一个批处理中完成。由于数据库 data 不存在,RETURN语句应该停止执行,USE语句将无法运行。但结果根本不是我的想法。有人可以帮忙吗?

更新

我可以确认我的测试代码是一次性的。我使用SQL profiler捕获了SQL:BatchStartingSQL:BatchCompleted个事件,结果如下。

enter image description here

SQL:BatchStartingSQL:BatchCompleted事件具有相同的SQL文本。

1 个答案:

答案 0 :(得分:4)

https://msdn.microsoft.com/en-us/library/ms188366.aspx

  

USE在编译和执行时执行并生效   立即

它在编译时执行。这就是原因。