2011-08-02 67 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;'? –