2009-08-18 77 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