相关疑难解决方法(0)

我什么时候需要在SQL Server中使用Begin/End Blocks和Go关键字?

有人能告诉我在SQL Server中何时何地需要使用beginend阻止?
此外,该Go关键字到底是做什么的?

t-sql sql-server language-features

99
推荐指数
5
解决办法
11万
查看次数

存储过程中END之后的语句

我今天遇到了一个有趣的问题.我正在改变存储过程并在最后放置一个select语句.它本来是临时的,只是用于处理数据.我很惊讶后来发现声明已经保存并且在SP运行时正在执行.

SET ANSI_NULLS ON
GO

-- Comments usually go here and are saved as part of the SP
ALTER PROCEDURE [dbo].[MySP]
    @param INT
AS
BEGIN
    --Your normal SQL statements here
END

--You can also add SQL statements here
select * from LargeTable

--You have access to the params
select @param
Run Code Online (Sandbox Code Playgroud)

有意义的是保存所有内容,而不仅仅是BEGIN/END内部的内容,否则评论SET ANSI_NULLS等会消失.我对从哪里开始有点困惑,所以我有几个问题:

  1. SET ANSI_NULLS被保存为SP的一部分.我已经确认每个SP都有自己的价值.SQL Server如何知道将其保存为SP的一部分,因为之前没有引用它?它是否对当前环境状态进行全面扫描,然后在ALTER PROCEDURE运行时保存状态(可能只是非默认值)?
  2. 显然BEGIN/END是可选的,没有内在含义.为什么他们甚至包括在内?它们给出了一种不存在的错误范围.在我看来,没有BEGIN/END和最后的GO会最有意义.

t-sql stored-procedures

7
推荐指数
2
解决办法
2348
查看次数