我想構建一個非常複雜的Table_valued函數(TVF),它將返回非固定輸出結構。帶隱式輸出的Table_valued函數
有時TVF可能返回2列,其他時間可能只返回1列。
我無法找到一個方法來做到這一點,因爲數據庫引擎需要明確的輸出表結構爲:
RETURNS @returnTable
TABLE
(
column1 numeric,
column2 numeric
)
一旦我找到了上述的解決方案我想這樣做:
SELECT
*
INTO #tmp
FROM MyTVF
我知道它可能實現的存儲過程,但然後我會面對另一個問題。通過使用存儲過程,我將無法將結果保存到臨時表中,而無需明確聲明輸出。
這裏是我想做些什麼了一槍例如:
CREATE FUNCTION [dbo].myFunction (@type int)
RETURNS @table TABLE
(
Column1 int,
Column2 int
)
AS
BEGIN
IF @type=1
BEGIN
INSERT INTO @table
SELECT 1 AS Column1, 2 AS Column2
END
ELSE
BEGIN
INSERT INTO @table
SELECT 1 AS OnlyOneColumn
END
RETURN
END
GO
SELECT * INTO #tmp1 FROM myFunction(1)
SELECT * FROM #tmp1
您可以使用最大列數聲明返回表。然後,在插入時,只消費你感興趣的列的數量。 – 2015-02-08 15:07:03
@GiorgosBetsos,你是否建議總是返回最大列數並使用NULL作爲cenario不相關列的值? – 2015-02-08 15:10:58
是的,使用NULL來填充冗餘列。這只是一個解決方法。 'TVF' AFAIK中不能有易失性返回類型, – 2015-02-08 15:14:52