2009-08-18 14 views
7

Non capisco perché il seguente errore mi dica. Ho pensato che fosse correlato alla sezione commentata, ma @SQL è nvarchar (4000).Sintassi non corretta vicino a "sp_executesql"

BEGIN 
    sp_executesql N'SELECT ''td''' 
    --sp_executesql @SQL, N'@StartDate DateTime, @EndDate DateTime, @End2 DateTime, @Program varchar(4)', @StartDate, @EndDate, @End2, @Program 
END 

risposta

13

Questo è il motivo:

 
-- This works just fine: 
BEGIN 
    -- You must have an exec before your sp_executesql or it will not work in a block 
    exec sp_executesql N'SELECT ''td''' 
END 

non si può semplicemente chiamare un proc memorizzato senza un exec quando ci si trova in un blocco.

+1

è possibile chiamare un proc memorizzato, senza e exec, ma solo quando la chiamata alla stored procedure è l'unica dichiarazione nel blocco. –

+1

deve essere la prima affermazione, non necessariamente l'unica. – Tao

2

Perché questo è incluso in un BEGIN ... END? Eseguendo sp_executesql esterno il blocco funzionerà.

Opzionalmente è possibile inserire un exec prima di sp_executesql.

0

In alcune occasioni ho dovuto usare maestro così:

exec master..sp_executesql 
Problemi correlati