2013-01-14 14 views
6

Obecnie używam programu SQL Server 2008 i próbuję utworzyć instrukcję za pomocą zmiennej tabeli, aby wstawić wiele wierszy do tabeli. W obecnej formie muszę wstawić informacje dodawane w 4 różnych miejscach (2 instrukcje wyboru, 1 wstawka i 1 aktualizacja), ale chciałbym móc utworzyć pojedynczą zmienną tabeli, więc muszę tylko wprowadzić informacje raz. Każda pomoc/sugestie będą bardzo mile widziane.Wstawianie wielu wierszy do tabeli programu SQL Server przy użyciu zmiennej tabeli

To jest przykład tego, co próbuję zmienić.

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

Nie jest jasne, co próbujesz osiągnąć - dlaczego jedna TVP mogłaby zastąpić dwie selekcje, wkładkę i aktualizację? – Oded

+0

Czy możesz wyjaśnić swoje pytanie bardziej szczegółowo? –

+0

Jeśli chcesz kierować tabelę ze zmienną, a następnie AFAIK, musisz utworzyć (przygotowaną) instrukcję ** wewnątrz ** zapytania przy użyciu 'CONCAT()', aby konkatować swoją zmienną i cały inny kod zapytania. – inhan

Odpowiedz

8

Czy tego szukasz tylko pod względem wprowadzania informacji raz?

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

wstawić do table1 wartości od table2:

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

. I oczywiście, tutaj 'table2' musiałby być ** zmienną tabeli **, a zatem powinien to być' @ table2' –

Powiązane problemy