我想知道是否可以使用标量函数的输出参数调用内联函数?
例如:
我的内联函数名为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子句。
无法解析查询文本。“
有什么建议吗?
任何帮助将不胜感激!
向前, 最好的问候安德烈亚斯
答案 0 :(得分:1)
我可以用两种不同的方式解释你想要做的事情。
您希望首先从 kp 表中获取单值,然后通过静态函数运行它,然后将结果提供给内联函数并获取表
在这种情况下,您可以执行以下操作:
declare @foo int;
set @foo = (select kp.id from kp where blahblahblah);
select * from MM.test_1(dbo.test_2(@foo))
更有可能的是,对于 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>