为什么它不接受一个串联的字符串作为SP中的参数?

时间:2015-06-09 11:31:32

标签: sql sql-server stored-procedures

我写了一个完美的SP。我用常规参数调用SP并且工作了。但是,现在我需要调用SP,如下所示

EXEC @v_nReturn = sp_get_next_value 'LP_' + @WhID + '_COUNTER'

intellisense在第一个'+'符号上出错。

  

它说“语法错误......”

@WhIDNVARCHAR(10),因此我不应将其转换为NVARCHAR

问题是什么?

2 个答案:

答案 0 :(得分:1)

尝试使用parens:

EXEC @v_nReturn = (sp_get_next_value 'LP_' + @WhID + '_COUNTER')

答案 1 :(得分:1)

调用存储过程时,SQL Server不执行(完整)表达式解析。这绝对是一个很小的变化非常方便的领域,尽管可能有很好的理由来限制。

如评论中所述,请使用单独的变量:

DECLARE @arg varchar(256) =  'LP_' + @WhID + '_COUNTER';
EXEC @v_nReturn = sp_get_next_value @arg;

如果@WhID是数字,请务必小心。然后,您需要先将值转换为字符串。