【问题标题】:SQL accepts multiple '+' while coding but doesn't produce a run-time error, why?SQL 在编码时接受多个“+”,但不会产生运行时错误,为什么?
【发布时间】:2016-05-28 10:10:41
【问题描述】:

这些代码行:

DECLARE @counter  integer
SET @counter = 42
WHILE @counter < 52
BEGIN
    set @counter = @counter++++++++ 1
    PRINT 'The counter is ' + cast(@counter as char) 
END

与这些相同(根据 SSMS):

DECLARE @counter  integer
SET @counter = 42
WHILE @counter < 52
BEGIN 
    set @counter = @counter + 1
   PRINT 'The counter is ' + cast(@counter as char) 
END

为什么 SSMS 不关心或考虑多个+

【问题讨论】:

  • + 也是一元运算符。我认为它什么也没做。但是你可以很容易地想象 1-1、1- -1、1- -(-1) 等等。

标签: sql-server tsql ssms


【解决方案1】:

第一个加号将被解释为加法操作(将右值加到左值并返回结果)。所有后续的加号将作为其右值的一元加号,即“返回后面的数值表达式的值” - 这可以链接:

+(+(+(+1)))

这毫无意义,但它是有效的语法。 如果 T-SQL 定义了一个 x++ 增量运算符,情况就不同了。当前版本的 T-SQL 没有这个功能。自 SQL Server 2008 起,+=-= 已添加,但 --++ 未添加。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-23
    • 2015-02-22
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多