SQL accepte plusieurs '+' lors du encoding mais ne génère pas d'erreur d'exécution, pourquoi?

Ces lignes de code:

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

Sont les mêmes que ceux-ci (selon SSMS):

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

Pourquoi le SSMS ne prend-il pas en count ou ne prend pas en count plusieurs + ?

Le premier plus sera interprété comme l'opération d'ajout (ajoutez rvalue à lvalue et renvoyez le résultat). Tous les signes plus suivants agiront comme un plus unaire vers sa valeur, c'est-à-dire "returnner la valeur de l'expression numérique qui suit" – ceci peut être chaîné:

 +(+(+(+1))) 

Ce qui est inutile, mais c'est une syntaxe valide. Ce serait une histoire différente si T-SQL définissait un opérateur d'incrément x++ . Aucune version actuelle de T-SQL n'a cela. += et -= ont été ajoutés à partir de SQL Server 2008, mais -- et ++ non.