Вы можете вернуть одну таблицу из функции T-SQL в SQL Server 2008.
Мне интересно, можно ли вернуть более одной таблицы.
Сценарий состоит в том, что у меня есть три запроса, которые фильтруют 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
Таким образом, единственное различие между двумя запросами - это фильтруемая таблица и HOW (предложение Where).
Я хотел бы знать, могу ли я вернуть Filter1 и Filter2 из функции. Я также открыт для предложений о различных способах решения этой проблемы.