2013-01-14 64 views
6

我正在使用SQL Server 2008,并试图使用表变量向表中插入多行来创建语句。就目前来看,我必须在4个不同的地方插入信息(2个选择语句,1个插入和1个更新),但希望能够创建单个表变量,因此我只需输入信息一次。任何帮助/建议将不胜感激。使用表变量将多行插入到SQL Server表中

这是我试图改变的一个例子。

PRINT 'Before' 
SELECT GROUPID, ModifiedBy, ModifiedDate 
FROM TableXYZ 
WHERE groupID in(ID1, ID2, ID3, ID4)                

BEGIN TRAN 


Insert into TableXYZ 
(GROUPID) 
VALUES 
(ID1), (ID2), (ID3), (ID4)                



UPDATE TableXYZ 
SET existingdays = 15 
    ,ModifiedBy = @userID 
    ,ModifiedDate = @today 
WHERE groupID in(ID1, ID2, ID3, ID4)                


Set @RowCount = @@ROWCOUNT 


PRINT 'After ' 

SELECT GROUPID, ModifiedBy, ModifiedDate 
FROM TableXYZ 
WHERE groupID in(ID1, ID2, ID3, ID4)  
+2

目前尚不清楚您试图实现的目标 - 为什么单个TVP能够替换两个选择,插入和更新? – Oded

+0

你能解释一下你的问题吗? –

+0

如果您想要使用变量AFAIK定位表,您需要在您的查询中使用CONCAT()来创建一个(准备好的)语句**来连接变量和所有其他查询代码。 – inhan

回答

8

这是你在只有一次进入了信息化方面寻找什么?

DECLARE @IDList TABLE 
(
    ID INT 
) 

INSERT INTO @IDList (ID) 
VALUES 
    (ID1) 
    ,(ID2) 
    ,(ID3) 
    ,(ID4) 

PRINT 'Before' 
SELECT GROUPID, ModifiedBy, ModifiedDate 
FROM TableXYZ AS T 
    INNER JOIN @IDList AS L 
     ON T.GroupID = L.ID 

BEGIN TRAN 


Insert into TableXYZ 
(GROUPID) 
SELECT ID 
FROM @IDList 


UPDATE TableXYZ 
SET existingdays = 15 
    ,ModifiedBy = @userID 
    ,ModifiedDate = @today 
FROM TableXYZ AS T 
    INNER JOIN @IDList AS L 
     ON T.GroupID = L.ID 


Set @RowCount = @@ROWCOUNT 


PRINT 'After ' 

SELECT GROUPID, ModifiedBy, ModifiedDate 
FROM TableXYZ AS T 
    INNER JOIN @IDList AS L 
     ON T.GroupID = L.ID 
1

要插入table1值从table2

INSERT INTO table1 (column1) 
SELECT col1 
FROM table2 
+1

当然,这里'table2'必须是**表变量**,因此它应该是'@ table2' –

相关问题