涉及运算的表值参数问题
Posted
技术标签:
【中文标题】涉及运算的表值参数问题【英文标题】:Table valued parameter problem involving operation 【发布时间】:2019-06-11 13:28:51 【问题描述】:我正在创建一个使用表值函数的视图。
这是一个简单的函数:
CREATE FUNCTION TEST(@COD INT)
RETURNS TABLE
AS
RETURN SELECT @COD COD
当我执行时:
SELECT * FROM DBO.TEST(1)
它运行完美,但是当我在函数内部进行操作时,它会显示一个错误:
SELECT * FROM DBO.TEST(1+1)
消息 102,第 15 级,状态 1,第 1 行 '+' 附近的语法不正确。
当我使用括号时也会出现错误:
SELECT * FROM DBO.TEST((1+1))
消息 102,第 15 级,状态 1,第 1 行 '(' 附近的语法不正确。
我有另一个数据库,当我执行上面的所有示例时,它运行完美。我认为它可能是服务器配置或数据库配置,但我不知道我在寻找什么。
【问题讨论】:
请用您正在使用的数据库标记您的问题。请注意,这在 SQL Server (dbfiddle.uk/…) 中运行良好。 其实问题出现在SQL Server中,一个数据库执行,另一个显示错误 检查两个数据库的数据库兼容性级别,并尝试使用模式名称 (dbo.TEST
) 显式地为调用添加前缀。我似乎记得旧版本对此更加挑剔。
谢谢。这是数据库中的兼容级别不起作用,它是 80,而在另一个数据库中它是 100。我改变了它,现在可以完美运行了!!
【参考方案1】:
这可能是在某个 SQL Server 版本中修复的问题。
作为替代方法,您可以使用 APPLY 来纠正此问题。
SELECT COD
FROM (SELECT 1+1 AS n)x
CROSS APPLY dbo.TEST(x.n);
【讨论】:
这并没有解决问题,它显示:SQL >Msg 102, Level 15, State 1, Line 3 >Incorrect syntax near '.'.
我已将架构添加到函数中。这应该可以解决问题。以上是关于涉及运算的表值参数问题的主要内容,如果未能解决你的问题,请参考以下文章
为啥需要以只读方式输入 SQL Server 存储过程的表值参数?