使用sp_executesql时语法错误不正确

时间:2012-04-17 18:11:03

标签: sql-server-2005

以下是声明:

exec sp_executesql N'CRM_ValidateUser @p0, @p1, @p2',
    N'@p0 nvarchar(5),@p1 nvarchar(4),@p2 int',@p0=N'login',@p1=N'pass',@p2=15

为什么我收到此错误消息:

  

Msg 102,Level 15,State 1,Line 1
  “CRM_ValidateUser”附近的语法不正确。

2 个答案:

答案 0 :(得分:4)

如果任何其他命令作为批处理的一部分传输,则需要说EXEC。在这种情况下,它将是参数定义,因此实际发送回SQL Server的批处理将类似于:

DECLARE @p0 NVARCHAR(5);
...
CRM_ValidateUser ...

这就是您的错误消息发生的原因。如果存储过程调用是批处理中的 first 语句,则只能省略EXEC,并且绝不应该排除IMHO。尝试:

EXEC sp_executesql N'EXEC CRM_ValidateUser...

指定架构前缀也是一个好主意。

答案 1 :(得分:-1)

DECLARE @p0 NVARCHAR(5);
DECLARE @p1 NVARCHAR(4);
DECLARE @p2 INT;

SET @p0 =N'login';

SET @p1 = N'pass';

SET @p2 = 15;
EXECUTE sp_executesql N'CRM_ValidateUser', @p0, @p1, @p2;