2010-11-16 24 views
1

Je définis un déclencheur de suppression, et j'ai besoin de sauvegarder la ligne supprimée, mais seulement quelques arguments de l'original et incluant une colonne de l'autre table:
TableC :
* colonne 1: valeur d'une colonne dans TableA
* colonne 2 à 6: Les valeurs de colums 1,2,3,5,6 de TableBInsérer une ligne avec des valeurs de plusieurs tables (SQL Server)

Tout ce que je veux est quelque chose comme ceci:

INSERT into TableC values (
(SELECT Column1A from TableA where TableA.Column = 'SomeValue'),
(SELECT column1, column2, column3, column5, column6 from TableB));

Le résultat sur TableC doit être:
Colonne1A, colonne1, colonne2, colonne3, colonne5, colonne6

Mais cela ne fonctionne pas. Dans mon cas particulier, TableB est la table supprimée accessible uniquement dans les déclencheurs. J'utilise SQL-Server 2008 mais tout ce dont j'ai besoin est la logique de la requête, puis j'essaie de la traduire.

Merci.

Répondre

1

Dans un autre cas, que je trouve honnêtement très étrange, qui pourrait être plus proche de ce que vous décrivez, cela pourrait fonctionner:

INSERT INTO MyTable 
SELECT 
    (SELECT ColumnA FROM Table1), 
    Table2.ColumnA, 
    Table2.ColumnB, 
    Table2.ColumnC, 
    Table2.ColumnD 
FROM 
    Table2 

De cette façon, vous êtes seulement sélectionner qu'une colonne de Table1 , mais en sélectionnant plusieurs colonnes de Table2, indépendamment de toute relation entre eux.

+0

C'est ce que je cherchais! Merci pour la réponse rapide. – fern17

+0

Évidemment, cela se casse si 'Table1' renvoie plus d'une ligne; Vous devez donc vous assurer de ne le faire fonctionner que sous cette condition unique. – BeemerGuy

+0

Ouais, j'ai compris ça. Mais c'est exactement le cas ici :) – fern17

1

Vous devez effectuer des jointures sur la sélection.
Voici un exemple:

INSERT INTO MyTable 
SELECT 
    Table1.ColumnA, 
    Table1.ColumnB, 
    Table2.ColumnA, 
    Table2.ColumnB 
FROM 
    Table1 
    INNER JOIN Table2 ON Table1.ID = Table2.ID 

Ceci est juste un exemple de « l'insertion de deux tables ».
Vous devez le modifier pour correspondre à ce que vous cherchez, ce que je n'ai pas compris à partir de votre exemple arbitraire.

+0

C'est correct mais les deux tables ne sont pas liées! La première table contient seulement un index, et la deuxième, les valeurs ... – fern17

+0

Je garderai cette réponse pour la référence de quelqu'un d'autre; vérifiez mon autre réponse. – BeemerGuy

1

Vous pouvez utiliser un cross join pour joindre des tables non liées:

INSERT MyTable 
     (col5, col7) 
SELECT t1.col5 
,  t2.col7 
FROM Table1 t1 
CROSS JOIN 
     Table2 t2 
WHERE t1.ID = 'SomeValue' 
     and t2.ID = 'OtherValue' 

Si l'une des tables juste contient une ligne, vous pouvez omettre la partie where pour elle.

+0

Je l'ai fait comme Beemer l'a dit. Je n'ai pas compris de cette façon :(Mais merci quand même pour la réponse rapide! – fern17