Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

T-SQL:impossibile passare una stringa concatenata come argomento alla procedura memorizzata

L'istruzione EXECUTE ha semplicemente una grammatica diversa rispetto ad altre istruzioni come SELECT e SET. Ad esempio, osserva la sezione relativa alla sintassi nella parte superiore delle due pagine seguenti.

Istruzione EXECUTE:http://msdn.microsoft.com/en-us/ libreria/ms188332.aspx

Istruzione SET:http://msdn.microsoft.com/en-us/ libreria/ms189484.aspx

La sintassi per EXECUTE accetta solo un valore

Mentre la sintassi per SET accetta un'espressione

Un valore è fondamentalmente solo una costante codificata, ma verrà valutata un'espressione. È come avere il varchar 'SELECT 1 + 1'. È solo un valore varchar in questo momento. Tuttavia, puoi valutare la stringa in questo modo:

EXEC('SELECT 1 + 1')

Suppongo che tutto ciò che sto sottolineando sia che il comando EXEC non consente espressioni per definizione, cosa che apparentemente hai già scoperto. Non so quale fosse l'intenzione degli sviluppatori di T-SQL quando l'hanno fatto in quel modo. Suppongo che la grammatica sfugga di mano se ti fosse permesso lanciare sottoquery all'interno di sottoquery nell'elenco dei parametri di una stored procedure.

Espressione T-SQL:http://msdn.microsoft.com/en- us/library/ms190286.aspx