假设我想创建一个 sql 脚本并执行如下操作:
DECLARE @SomeVariable int
SET @SomeVariable = 'VALUE'
FROM someTable
--do stuff with @SomeVariable
GO
CREATE PROCEDURE myProcedure
(
@MyParameter
)
AS
SET NOCOUNT ON
--Do something
--Do something using @SomeVariable
SET NOCOUNT OFF
RETURN 0
GO
我不能,因为 @SomeVariable 随他所属的批次一起死亡,而 myProcedure 需要它自己的批次。显然,我可以创建一个 #temp 表并在其中填充我需要的任何值,但随后我必须从中进行选择 - 添加代码虽然微不足道,但会损害可读性,并且当我需要的只是一个全局变量时,这看起来很愚蠢。有没有更好的办法?
痛苦地澄清。我知道 SQL Server 有称为“表”的“全局变量” - 我在上一段中提到使用 #table 是一个可能的解决方案,就像使用实际的永久表一样。我在这里寻找的可能更多的是一个全局常量,我可以在给定脚本中的任何地方使用它,而不是全局变量 - 所以我们都可以停止因为全局变量的邪恶而尿裤子。
GO 语句不属于 SQL 语言规范的一部分,它是批处理分隔符。您的局部变量的范围仅限于批处理。因此,它们超出了 GO 语句的范围。我认为你唯一的选择就是按照你所描述的方式进行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)