如何在SQL Server where子句中使用表值函数

时间:2015-08-12 10:49:59

标签: sql sql-server user-defined-functions table-valued-parameters

我有一个表值函数,它返回一组id数据。我想把这个函数放在我的查询中;

SELECT * 
FROM caritbl 
WHERE cari_id IN (dbo.fn_AtamaliCariListe(37))

有什么建议吗?

编辑:我正在使用SQL Server

4 个答案:

答案 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的答案是最好的答案。需要注意的是,等效joinin更复杂。它将是:

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

这在逻辑上等同于你想说的。