SQL akzeptiert mehrere '+' während der Codierung, aber nicht einen Laufzeiterrors, warum?

Diese Zeilen des Codes:

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

Sind die gleichen wie diese (nach SSMS):

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

Warum passt sich SSMS nicht mehr an?

Das erste Plus wird als Add-Operation interpretiert (add Rvalue to lvalue und das Ergebnis zurückgeben). Alle nachfolgenden Pluszeichen werden als unary plus zu ihrem Rvalue fungieren, das heißt "den Wert des numerischen Ausdrucks zurückgeben, der folgt" – das kann angekettet werden:

 +(+(+(+1))) 

Was ist sinnlos, aber es ist gültige syntax. Es wäre eine andere Geschichte, wenn T-SQL einen x++ Inkrementoperator definiert hat. Keine aktuelle Version von T-SQL hat das. += und -= wurde ab SQL server 2008 hinzugefügt, aber -- und ++ nicht.