SQL Server 2008 R2调用带内联CONVERT参数的表值函数报错
问题解决方法
这个报错是因为SQL Server 2008 R2对多语句表值函数的参数传入有语法限制——不能直接在函数调用的参数位置使用表达式(比如CONVERT这类转换函数),必须先将表达式结果存入变量,再把变量传入函数。
具体解决步骤
- 先声明变量存储转换后的值:
DECLARE @convertedValue NVARCHAR(MAX) = CONVERT(NVARCHAR(MAX), @value1); SELECT * FROM myFunction(@convertedValue);
补充说明
如果你的
myFunction是内联表值函数(函数体只有一条SELECT语句,无BEGIN/END包裹),可以尝试用嵌套子查询的方式绕过限制:SELECT * FROM myFunction( (SELECT CONVERT(NVARCHAR(MAX), @value1)) );注意子查询外的括号不能省略,这是SQL Server 2008 R2支持的内联函数参数表达式写法。
没有系统设置可以直接解除这个限制,这是该版本的语法特性。如果长期有这类需求,建议升级到SQL Server 2012及以上版本——从2012开始,多语句表值函数也支持直接传入表达式作为参数。
内容的提问来源于stack exchange,提问作者MERCCK
相关产品推荐
相关产品推荐

