涉及运算的表值参数问题

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 存储过程的表值参数?

无法访问 sql 中查询的表值参数

将DataTable传递给存储过程中的表值参数不起作用[关闭]

是否可以在 sqlkata 中查询参数化的表值函数?

如何从具有命名参数的表值函数创建 ADODB 记录集

sql中的表值函数与标量值函数区别与用法