2009-08-18 9 views
7

Nie rozumiem, dlaczego poniższe informacje dają mi błąd. Myślałem, że jest to powiązane z zakomentowaną sekcją, ale @SQL to nvarchar (4000).Niepoprawna składnia w pobliżu '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 

Odpowiedz

13

Dlatego:

 
-- 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 

Nie można po prostu zadzwonić do przechowywanej proc bez Exec, gdy jesteś w bloku.

+1

Można wywołać przechowywanej proc i bez exec, ale tylko wtedy, gdy wezwanie do przechowywanej proc jest tylko oświadczenie w bloku. –

+1

musi to być pierwsze stwierdzenie, niekoniecznie jedyne. – Tao

2

Dlaczego masz to zawarte w BEGIN ... END? Uruchomienie sp_executesql na zewnątrz bloku będzie działało.

Opcjonalnie można wstawić exec przed sp_executesql.

0

W niektórych przypadkach musiałem użyć mistrza, a także:

exec master..sp_executesql