2010-02-01 9 views
0

j'ai deux situations de tables'il vous plaît aidez-moi à créer une requête insérer plusieurs

create table t1(cid int, isnews int) 

create table t2(nid int,cid int, isnews int) 

est comme ceci: si t2 contient t2.cid = t1.cid puis les t2.isnews = t1.news et si t2 ne contient pas cid de t1 alors nouvel enregistrement devrait être inséré dans t2 et que t1.cid, t1.isnews devrait être inséré dans t2 ..

et le tableau complet devrait être fait en une seule requête ... j'ai fait la partie de mise à jour, mais pas en mesure de faire la partie insertion.

upd ate requête:

UPDATE t22 
SET  t22.isnews = t11.isnews 
FROM  t2 AS t22 
    JOIN t1 AS t11 
    ON t11.cid= t22.cid 

J'ai préparé ci-dessous le curseur pour insérer ... est-ce bon? :

DECLARE @clntid INT 
DECLARE @clntnewsltr INT 
DECLARE clientnews CURSOR FOR 
SELECT clientid,newsLetter 
FROM clients 
WHERE clientid NOT IN (SELECT clientid FROM clientprivacy) 

OPEN clientnews 
FETCH NEXT FROM clientnews INTO @clntid,@clntnewsltr 

WHILE @@FETCH_STATUS = 0 
BEGIN 

    INSERT INTO clientprivacy (clientId,tdNewsLetters) VALUES(@clntid, @clntnewsltr) 
FETCH NEXT FROM clientnews INTO @clntid,@clntnewsltr 
END 

CLOSE clientnews 
DEALLOCATE clientnews 
+0

Votre question a déjà été formaté, mais s'il vous plaît modifier pour correspondre à des tables et des colonnes de votre exemple ('' t1' vs clientprivacy'), de fournir des informations sur les DBMS que vous utilisez et reformater vos conditions. Utilisez l'aperçu pour vérifier s'il est lisible. –

Répondre

1

Je pense que c'est le genre de chose que vous êtes après:

--INSERT t2 (cid, isnews) 
SELECT t1.cid, t1.isnews 
FROM t1 
    LEFT JOIN t2 ON t1.cid = t2.cid 
WHERE t2.cid IS NULL 

Je l'ai commenté la ligne INSERT - je vous recommande d'exécuter la commande SELECT sur son propre premier à vérifier vous donne le résultat correct (tous les enregistrements de t1 qui n'ont pas de cid correspondant en t2).

J'ai supposé que t2.nid est une colonne IDENTITY.

+0

Vous faites un travail noble ... une aide précieuse pour tous les programmeurs –

0

Vous serez tellement mieux sans curseurs :) Les curseurs prennent BEAUCOUP plus longtemps pour fonctionner dans de grands ensembles de données.

Il est vrai que vous pouvez utiliser un LEFT JOIN, mais vous pouvez également utiliser un SELECT dans votre clause WHERE. La plupart du temps c'est un choix de style.

CREATE TABLE table1(col_1 int, col_2 int) 
CREATE TABLE table2(nid int, col_1 int, col_2 int) 


INSERT INTO table2 (col_1,col_2) 
SELECT col_1,col_2 
FROM table1 
WHERE col_1 NOT IN (SELECT col_1 FROM table2)