2013-01-14 12 views
6

Attualmente sto utilizzando SQL Server 2008 e sto cercando di creare un'istruzione utilizzando una variabile di tabella per inserire più righe nella tabella. Allo stato attuale, devo inserire le informazioni che vengono aggiunte in 4 punti diversi (2 istruzioni select, 1 insert e 1 update), ma vorrei poter creare una variabile table singola, quindi devo solo inserire informazioni una volta. Qualsiasi aiuto/suggerimento sarebbe molto apprezzato.Inserimento di più righe in una tabella di SQL Server utilizzando una variabile di tabella

Questo è un esempio di ciò che sto cercando di cambiare.

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

Non è chiaro cosa si stia cercando di ottenere: perché un solo TVP potrebbe sostituire due selezioni, un inserto e un aggiornamento? – Oded

+0

Puoi spiegare la tua domanda in modo più dettagliato? –

+0

Se si desidera scegliere come target una tabella con una variabile, quindi AFAIK, sarà necessario creare una dichiarazione (preparata) ** all'interno ** della query utilizzando 'CONCAT()' per concatenare la variabile e tutti gli altri codici di query. – inhan

risposta

8

'questo quello che stai cercando in termini di solo l'inserimento delle informazioni una volta?

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

Per inserire in table1 valori da table2:

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

E naturalmente, qui 'table2' dovrebbe essere una ** variabile di tabella ** e quindi dovrebbe essere' @ table2' –

Problemi correlati