Vraag Waarom veroorzaakt het samenvoegen van tekenreeksen in het argument van EXEC soms een syntaxisfout in T-SQL?


In MS SQL Server Management Studio 2005 wordt deze code uitgevoerd

EXEC('SELECT * FROM employees WHERE employeeID = ' + CAST(3 AS VARCHAR))

geeft deze foutmelding: Incorrect syntax near 'CAST'

Als ik dit echter doe, werkt het:

DECLARE @temp VARCHAR(4000)
SET @temp = 'SELECT * FROM employees WHERE employeeID = ' + CAST(3 AS VARCHAR)
EXEC(@temp)

Ik vond hier een verklaring: T-SQL: kan aaneengeschakelde reeks niet doorgeven als argument aan opgeslagen procedure

Volgens het geaccepteerde antwoord, EXEC kan een lokale variabele of een waarde als argument gebruiken, maar geen uitdrukking.

Maar als dat het geval is, waarom werkt dit dan:

DECLARE @temp VARCHAR(4000)
SET @temp = CAST(3 AS VARCHAR)
EXEC('SELECT * FROM employees WHERE employeeID = ' + @temp)

'SELECT * FROM employees WHERE employeeID = ' + @temp Het lijkt een uitdrukking voor mij, maar de code wordt uitgevoerd zonder fouten.


10
2018-04-15 15:07


oorsprong


antwoorden:


De documentatie zegt dat EXEC kan een stringvariabele, een constante T-SQL-string of combinaties / concatenaties van beide gebruiken.

Het voorbeeld "Waarom werkt dit" maakt gebruik van een aaneenschakeling van een constante T-SQL-tekenreeks en een tekenreeksvariabele en is dus volkomen legaal.


9
2018-04-15 15:17