在TSQL中使用IF后的DECLARE - SQL Server何时分配资源?

Wil*_*ild 3 t-sql sql-server

如果我执行以下操作:

IF @THING = TRUE BEGIN
     DECLARE @BIGTHING AS BIGINT
END
Run Code Online (Sandbox Code Playgroud)

SQL Server会为此分配资源@BIGTHING吗?

或者更好的问题:SQL Server是否解析存储过程并在执行之前分配所有声明的变量?

Unh*_*ean 6

它必须如此

IF 1=2 BEGIN
     DECLARE @BIGTHING AS BIGINT=0
END

select @BIGTHING
Run Code Online (Sandbox Code Playgroud)

使用Microsoft SQL Server 2008 R2对我运行没有问题.有趣的是,如果变量默认为如上所示的值,则只在IF条件为真时才设置该值.

  • 我认为值得注意的是,"无法访问"声明必须仍然在第一次使用之前,否则您会收到错误. (2认同)