如何使用标量函数的输出参数调用内联表函数?

时间:2009-02-09 06:23:49

标签: sql-server function sql-server-2000

我想知道是否可以使用标量函数的输出参数调用内联函数?

例如: 我的内联函数名为test_1(输入参数格式bigint),以下示例效果很好:

SELECT * FROM MM.test_1(4679)

但是现在我想将它与来自名为dbo.test_2(输出参数格式bigint)的标量函数的输出参数一起使用,以使其更加动态,但它不起作用?

SELECT(SELECT * FROM MM.test_1(dbo.test_2(kp.id))) 来自kp kp WHERE id = 4679

我收到以下错误消息:
“函数参数列表中的错误:'。'未识别。 参数列表不完整。 缺少FROM子句。 无法解析查询文本。“

有什么建议吗?

任何帮助将不胜感激!

向前, 最好的问候安德烈亚斯

2 个答案:

答案 0 :(得分:1)

我可以用两种不同的方式解释你想要做的事情。

场景1:

您希望首先从 kp 表中获取单值,然后通过静态函数运行它,然后将结果提供给内联函数并获取表

在这种情况下,您可以执行以下操作:

declare @foo int;
set @foo = (select kp.id from kp where blahblahblah);
select * from MM.test_1(dbo.test_2(@foo))

场景2:

更有可能的是,对于 kp 表中的每条记录,您希望将所有这些讨厌的内容添加到其ID和 union 中表。

在这种情况下,我可以建议的最好的是一些动态SQL,它通过你的id值,使用游标,计算部分结果,然后UNIONs一起。谷歌使用游标循环遍历表格,你会发现足以让你前进(如this post)。你必须把你的表值函数想象成一个(惊奇......)表。您不能像使用静态函数一样将它用作SELECT语句中的列,也不能将查询字段反馈给自己。

如果从应用程序调用此SQL,则应该认真考虑在代码中执行此操作。

祝你好运!

答案 1 :(得分:0)

SELECT * FROM MM.test_1(dbo.test_2(4679))

如果你有一个表值函数 test_1 和一个标量函数 test_2 ,这部分应该可以正常工作。我现在只能在MSSQL 2008中测试,但据我所知,MSSQL 2000也应该喜欢它。

但是,您希望样本查询做什么?据我所知,你从 kp 中选择 MM.test_1 的输出......这是没有意义的。< / p>