Asp*_*Net 18 sql t-sql sql-server
由于永远不会声明@A,因此sql server应该抛出错误,但事实并非如此.这是为什么?
DECLARE @i int = 1;
IF @i > 10
BEGIN
DECLARE @A int = 100;
END
PRINT @A; // doesn't return any result
Run Code Online (Sandbox Code Playgroud)
感谢名单
gbn回答了问题,但在相关说明中,请注意以下代码:
DECLARE @i INT = 0
WHILE @i < 2
BEGIN
DECLARE @a VARCHAR(100)
IF @i = 0
SET @a = 'changed'
PRINT COALESCE(@a, 'is null')
SET @i = @i + 1
END
Run Code Online (Sandbox Code Playgroud)
运行时,它会打印两次“更改”,而许多人可能希望它打印“更改”,然后“为空”。在循环内声明变量时要小心。您可能需要在声明中将其显式设置为NULL。例如
DECLARE @a VARCHAR(100) = NULL
Run Code Online (Sandbox Code Playgroud)
运行此修改的版本时,它将显示“已更改”,然后显示“为空”。