从SQL Server 2008中的T-SQL函数返回多个表

She*_*tin 1 sql t-sql sql-server sql-server-2008

您可以从SQL Server 2008中的T-SQL函数返回单个表.

我想知道是否可以返回多个表.

场景是我有三个查询过滤3个不同的表.每个表都根据我想从函数返回的5个过滤表进行过滤; 而不是在每个查询中复制和粘贴他们的创建.

这是复制和粘贴的简单示例:

FUNCTION GetValuesA(@SomeParameter int) RETURNS @ids TABLE (ID int) AS 

  WITH Filter1 As ( Select id FROM FilterTable1 WHERE Attribute=SomeParameter )
     , Filter2 As ( Select id FROM FilterTable2 WHERE Attribute=SomeParameter )

  INSERT INTO @IDs
  SELECT ID FROM ValueTableA
  WHERE ColA IN (SELECT id FROM Filter1)
  AND   ColB IN (SELECT id FROM Filter2)

  RETURN

-----------------------------------------------------------------------------

FUNCTION GetValuesB(@SomeParameter int) RETURNS @ids TABLE (ID int) AS 

  WITH Filter1 As ( Select id FROM FilterTable1 WHERE Attribute=SomeParameter )
     , Filter2 As ( Select id FROM FilterTable2 WHERE Attribute=SomeParameter )

  INSERT INTO @IDs
  SELECT ID FROM ValueTableB
  WHERE ColA IN (SELECT id FROM Filter1)
  AND   ColB IN (SELECT id FROM Filter2)
  AND   ColC IN (SELECT id FROM Filter2)

  RETURN
Run Code Online (Sandbox Code Playgroud)

因此,两个查询之间的唯一区别是正在过滤的表和HOW(Where子句).

我想知道我是否可以从函数中返回Filter1和Filter2.我也愿意就解决这个问题的不同方法提出建议.

JNK*_*JNK 5

没有.

从概念上讲,您希望如何处理返回可变数量的表的函数?你会JOIN一次在两张桌子上吗?如果返回的字段没有对齐怎么办?

有什么理由你不能为每个过滤器提供TVF吗?