我写了一个完美的SP。我用常规参数调用SP并工作。不过,现在我需要调用SP像下面为什么它不接受一个连接的字符串作为SP中的参数?
EXEC @v_nReturn = sp_get_next_value 'LP_' + @WhID + '_COUNTER'
智能感知给人第一'+'
标志错误。
它说: “不正确的语法犯错......”
@WhID
为NVARCHAR(10)
,所以我不应该将其转换为NVARCHAR
。
是什么问题?
我写了一个完美的SP。我用常规参数调用SP并工作。不过,现在我需要调用SP像下面为什么它不接受一个连接的字符串作为SP中的参数?
EXEC @v_nReturn = sp_get_next_value 'LP_' + @WhID + '_COUNTER'
智能感知给人第一'+'
标志错误。
它说: “不正确的语法犯错......”
@WhID
为NVARCHAR(10)
,所以我不应该将其转换为NVARCHAR
。
是什么问题?
SQL Server不这样做,当你调用存储过程(全)表达分析。这绝对是一个小变化非常方便的领域,虽然可能有充分的理由限制。
正如评论所说,用一个单独的变量:
DECLARE @arg varchar(256) = 'LP_' + @WhID + '_COUNTER';
EXEC @v_nReturn = sp_get_next_value @arg;
要小心,如果@WhID
是数字。然后,您需要先将该值转换为字符串。
我不知道存储过程中的代码。但是我想警告未经检查的字符串连接并将其作为参数传递是** SQL Injection **的可能之门。 –
尝试用括号:
EXEC @v_nReturn = (sp_get_next_value 'LP_' + @WhID + '_COUNTER')
不幸的是,你不能连接并创建一个字符串,同时将它作为参数传递给一个过程,使用一个变量,通过连接字符串来设置它,然后将该变量传递给过程 – ughai
我刚试过,它工作。请将其作为回答发布 –