2013-08-21 35 views
0

我有一個SQL函數返回一個表。我想知道如何獲取結果表並將其返回到我使用的臨時表(在這種情況下稱爲@Values)。SQL表函數變量

下面是一個例子:

declare @values table(
MinValue money, 
MaxVale money 
) 


/* 
Fill @Values with dbo.GenPayValues function 
*/ 

目前我只能夠從這樣的功能選擇:

SELECT * 
FROM dbo.GenPayValues(13.00, 25.00) 

有誰知道這是否可能?非常感謝您花時間閱讀本文。

+0

請問爲什麼DownVotes和Close表決? – Botonomous

+2

可能是因爲這是一個簡單的問題,可能是因爲[它曾被問過](http://stackoverflow.com/questions/16742434/insert-into-table-variable-using-result-set-from-a-udf),可能是因爲你沒有展示任何研究或企圖自己嘗試插入插入,也可能是因爲它在頭兩分鐘內有三次加分。我可以引用數百個更好的問題,而這些問題並沒有得到三次加票。 –

+0

@AaronBertrand感謝您的詳細回覆。我真的很抱歉,並不認爲這個問題違反了任何規則。我非常喜歡這裏的社區支持。 – Botonomous

回答

2

這將工作,只要結構是完全一樣的:

INSERT @values 
SELECT * 
FROM dbo.GenPayValues(13.00, 25.00) 

但是,如果結構是不同的,這樣做,而不是:

SELECT * 
INTO #values 
FROM dbo.GenPayValues(13.00, 25.00) 

這將創建一個臨時表,而不是變量,但它仍然會在範圍結束時被刪除。

+1

非常感謝。我知道這會很簡單!我會接受答案,當它允許我。 – Botonomous

+0

這有點違反了「select *」規則。我會創建一個@values與這些列(MinValue錢, MaxVale錢)........並明確選擇..........如在.....插入@ values(MinValue,MaxValue)從dbo.GenPayValues(0,0)中選擇MinValue,MaxVale ........如果/當某人更改表值函數........它將被找到遲早。 – granadaCoder

2

只是INSERT

INSERT INTO @values 
SELECT * 
FROM dbo.GenPayValues(13.00, 25.00) 

我假設以相同的順序dbo.GenPayValues返回數據,你已經宣佈你的表@values - 沒有多餘的列。如果沒有,你可以重新排序或選擇明確:

INSERT INTO @values(MinValue, MaxVale) 
SELECT MinValue, MaxValue 
FROM dbo.GenPayValues(13.00, 25.00)