2013-01-14 5 views
6

현재 SQL Server 2008을 사용하고 있으며 테이블 변수를 사용하여 여러 행을 테이블에 삽입하려고합니다. 지금 당장은 4 개의 다른 지점 (2 select 문, 1 insert 및 1 update)에 추가되는 정보를 삽입해야하지만 하나의 테이블 변수를 만들 수 있기를 원합니다. 한 번 정보. 어떤 도움이나 제안이라도 대단히 감사하겠습니다.테이블 변수를 사용하여 SQL Server 테이블에 여러 행 삽입

변경하려는 내용의 예입니다. table2에서 table1 값으로

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

를 삽입하려면 :

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

물론 여기서'table2'는 ** 테이블 변수 **가되어야합니다. 따라서'@ table2'가되어야합니다 –