方案: 需要通过ň参数的存储过程。其中一个参数是varchar(x)
。该varchar参数需要从少数其他varchar变量中构建。此问题使用SQL Server 2005,但此行为适用于所有版本的SQL Server。T-SQL:无法通过连接字符串作为参数传递给存储过程
设置:
DECLARE @MyString varchar(500), @MyBar varchar(10), @MyFoo varchar(10)
SELECT @MyBar= 'baz '
SELECT @MyFoo= 'bat '
-- try calling this stored procedure!
EXEC DoSomeWork @MsgID, 'Hello ' + @MyBar + '" world! "' + @MyFoo + '".'
这将产生SQL Server中的异常:Incorrect syntax near '+'
。通常你可能会认为数据类型是错误的(即变量是不同类型的,但会产生不同的错误信息)。
这里有没有错误编译一个正确的实现:
SELECT @MyString= 'Hello ' + @MyBar + '" world! "' + @MyFoo + '".';
EXEC DoSomeWork @ID, @MyString
问题:为什么难道是T-SQL无法处理一个varchar作为参数的级联?它知道类型,因为它们被正确声明为varchar。
此评论中引用的网站不再有效。 – Buggieboy 2013-11-25 21:40:01