【问题标题】: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。我改变了它,现在可以完美运行了!!

标签: sql sql-server function sql-server-2008-r2 table-valued-parameters


【解决方案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 '.'.
  • 我已将架构添加到函数中。这应该可以解决问题。
猜你喜欢
  • 1970-01-01
  • 2023-03-05
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多