Sql 为什么这在SSMS中起作用?

Sql 为什么这在SSMS中起作用?,sql,ssms,Sql,Ssms,前几天晚上我在一个数据库课上,我们注意到下面的代码似乎可以工作,但我们无法从逻辑上理解为什么 DECLARE @counter integer SET @counter = 42 WHILE @counter < 52 BEGIN set @counter = @counter+++++ + 1 PRINT 'The counter is ' + cast(@counter as char) END 声明@counter整数 设置@counter=42 而@coun

前几天晚上我在一个数据库课上,我们注意到下面的代码似乎可以工作,但我们无法从逻辑上理解为什么

DECLARE @counter  integer
SET @counter = 42
WHILE @counter < 52
BEGIN 
    set @counter = @counter+++++ + 1
    PRINT 'The counter is ' + cast(@counter as char) 
END
声明@counter整数
设置@counter=42
而@counter<52
开始
设置@counter=@counter+1
打印“计数器为”+强制转换(@计数器为字符)
结束

我们意识到我们可以在@counter变量上添加任意数量的+,而SSMS似乎并不在意,即使它与原始变量不匹配。有人知道这是为什么吗?

在变量名后面附加一个+不会改变变量名,因为空格会被忽略(而且+在变量名中不是有效字符)


有关为什么多个+符号有效的讨论,请参阅。本质上,第一个之后的每个+(或-)都被视为一元运算符。

有趣。如果将其更改为
+-1
,它将进入无限循环。如果您将其更改为
+-+-+1
,它也可以工作。您可能会发现它很有用。基本上,我猜只有第一个“+”被计算,而所有其他的“+”都被视为“这是一个正数”,所以++1与+Positive1是一样的