2011-08-02 93 views
0

這對大多數人來說可能是微不足道的,但我並沒有長時間(僅6個月)編寫存儲過程。我希望能夠根據用於INSERT查詢的列之一設置變量@testid。我怎樣才能做到這一點?從INSERT查詢中存儲SQL變量FROM子句結果列

DECLARE @testid INT; 

INSERT INTO [exporttestresultreport] (
    [testid], 
    [othercolumn] 
) 
SELECT 
    [testid], -- <======= how can I set my variable based on this column? 
    [othercolumn] 
FROM 
    [exporttestresultreport] e 
WHERE 
    [exporttestresultreportid] = @exporttestresultreportid 

回答

3
DECLARE @testid INT; 

DECLARE @test TABLE (testid int); 

INSERT INTO [exporttestresultreport] (
    [testid], 
    [othercolumn] 
) 
OUTPUT INSERTED.testID INTO @test 
SELECT 
    [testid], -- <======= how can I set my variable based on this column? 
    [othercolumn] 
FROM 
    [exporttestresultreport] e 
WHERE 
    [exporttestresultreportid] = @exporttestresultreportid; 

SELECT @testid = testid FROM @test; 

的INSERT..SELECT ..本質上是多行,因此不會使semse允許值分配給一個標量:應該使用什麼一行價值?

+0

@Mr。 MacGyver:任何理由不接受這個*較老的答案? – gbn

+0

如果你改正你的語法,我會將它標記爲答案。這就是我選擇其他傢伙的原因。我怎樣才能結合這些查詢? – MacGyver

+0

@Mr。 MacGyver:你得到了什麼錯誤? – gbn

1
DECLARE @testid INT; 

DECLARE @t TABLE(t INT); 

INSERT exporttestresultreport 
(
    testid, othercolumn 
) 
OUTPUT INSERTED.testid INTO @t 
SELECT testid, othercolumn 
FROM 
    [exporttestresultreport] e 
WHERE 
    [exporttestresultreportid] = @exporttestresultreportid; 

SELECT @testid = t FROM @t; 

-- not sure what you want to do if there are multiple rows in the insert 
+0

你知道我怎麼可以在同一個OUTPUT行添加多個臨時表嗎? – MacGyver

+1

當然,您可以向@t添加更多列,然後將INSERTED.othercolumn添加到OUTPUT子句。但是,如果你的意圖是將所有列輸出到變量中,那麼爲什麼不只是'SELECT @testid = testid,@othercolumn = othercolumn FROM ...; INSERT exporttestresultreport SELECT @testid,@othercolumn;'? –