我有一个表值函数,它返回一组id数据。我想把这个函数放在我的查询中;
SELECT *
FROM caritbl
WHERE cari_id IN (dbo.fn_AtamaliCariListe(37))
有什么建议吗?
编辑:我正在使用SQL Server
答案 0 :(得分:8)
在这种情况下,您可以像表一样使用此功能。通常,您执行的查询类似于;
select * from XTable x where x.col in (select y.col from YTable y)
当您使用表值函数时,也可以以相同的方式执行;
select * from XTable x where x.col in (select y.col from dbo.fn_YourFunction(idparameter) y)
不是你的表值函数应该返回一个名为" col"的列的结果。
答案 1 :(得分:2)
只需使用该功能进行SELECT。
--Sample Table
SELECT 12 AS A
INTO #Temp
--Query here
SELECT * FROM #Temp WHERE A IN(
SELECT [transform].[Maximum] (10,12))
这应该可以解决问题
答案 2 :(得分:1)
在大多数情况下,Aykut的答案是最好的答案。需要注意的是,等效join
比in
更复杂。它将是:
SELECT DISTINCT c.*
FROM caritbl c JOIN
dbo.fn_AtamaliCariListe(37) as acl(id)
ON c.cari_id = acl.id;
请注意DISTINCT
。除非我们知道函数返回唯一值,否则我们需要它。
现在,可能会出现JOIN
实际上更好的情况。如果函数是非确定性的,则SQL Server可能会为IN
处理的每一行重复重新计算它。我不知道SQL Server是否会这样做,但它是可能的。 JOIN
确保只对函数进行一次评估。
答案 3 :(得分:0)
你总是可以加入它。
select yourfields
from yourtable join yourfunction on something
where whatever
这在逻辑上等同于你想说的。