2015-06-09 49 views
0

我写了一个完美的SP。我用常规参数调用SP并工作。不过,现在我需要调用SP像下面为什么它不接受一个连接的字符串作为SP中的参数?

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

智能感知给人第一'+'标志错误。

它说: “不正确的语法犯错......”

@WhIDNVARCHAR(10),所以我不应该将其转换为NVARCHAR

是什么问题?

+3

不幸的是,你不能连接并创建一个字符串,同时将它作为参数传递给一个过程,使用一个变量,通过连接字符串来设置它,然后将该变量传递给过程 – ughai

+0

我刚试过,它工作。请将其作为回答发布 –

回答

1

SQL Server不这样做,当你调用存储过程(全)表达分析。这绝对是一个小变化非常方便的领域,虽然可能有充分的理由限制。

正如评论所说,用一个单独的变量:

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

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

+0

我不知道存储过程中的代码。但是我想警告未经检查的字符串连接并将其作为参数传递是** SQL Injection **的可能之门。 –

1

尝试用括号:

EXEC @v_nReturn = (sp_get_next_value 'LP_' + @WhID + '_COUNTER') 
相关问题