2009-08-18 73 views
7

我不明白爲什麼以下給我的錯誤。我認爲它與註釋部分有關,但@SQL是nvarchar(4000)。'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 

回答

13

這就是爲什麼:

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

你不能只調用存儲過程沒有EXEC,當你在一個塊。

+1

您可以調用存儲過程沒有和exec,但只有當調用存儲過程是塊中唯一的語句。 – 2009-08-18 23:05:40

+1

它必須是第一個聲明,不一定是唯一的聲明。 – Tao 2010-07-06 17:15:55

2

爲什麼你把這個放在BEGIN ... END裏?在塊的外部運行sp_executesql將工作。

(可選)您可以在sp_executesql之前放置一個exec

0

在某些情況下,我不得不使用主,以及:

exec master..sp_executesql