2009-11-25 4 views
0

J'essaie désespérément de créer une table finale pour une envirnment de production, mais Im ayant des problèmes ....déclaration Sql mise à jour Questions

J'ai 2 tables dans ma base de données. MyTable a exactement le même format que l'autre (AnotherTable). AnotherTable a la valeur finale que j'aimerais avoir dans MyTable.

J'essaye de mettre à jour la valeur de gq de MyTable pour égaler la valeur dans la valeur gq d'AnotherTable. Je ne peux plus utiliser AnotherTable en production, car il s'agit de données archivées ...

Ainsi, mon souci. J'ai écrit une déclaration de mise à jour (ci-dessous) qui essaie de le faire. Le problème est que je ne veux pas mettre à jour CHAQUE ligne de MyTable chaque fois que cette mise à jour est appelée. Ma seconde clause where renvoie une erreur "l'identificateur multipart ne peut pas être lié". Pourtant, j'ai besoin d'avoir la deuxième clause là-bas afin de m'assurer que je ne mets pas à jour toute la valeur de la base de données à la fois.

Aidez s'il vous plaît! Je me sens encore comme un newb

UPDATE MyTable 
SET MyTable.gq= 
    (select top 1 ANotherTable.GQ as gq 
    from AnotherTable , MyTable 
    WHERE CONVERT(VARCHAR(MAX), AnotherTable.UniqueTextField)= MyTable.uniqueVarCharField 
    ) 
WHERE CONVERT(VARCHAR(MAX), AnotherTable. UniqueTextField) 
     = MyTable.uniqueVarCharField 

Répondre

1
UPDATE 
    M 
SET 
    MyTable.gq = A.gq 
FROM 
    MyTable M 
    JOIN 
    AnotherTable A ON CONVERT(VARCHAR(MAX), A.UniqueTextField)= M.uniqueVarCharField 

Le REJOIGNEZ limitera à l'endroit où elle correspond.

Cependant, vous devrez peut-être d'autres filtres dans une clause WHERE ou plusieurs conditions JOIN Ce sera toujours mettre à jour toutes les lignes où les tables se croisent

+0

Pourquoi cela, sélectionnez plus de lignes que nécessaire? Et comment puis-je l'obtenir pour mettre à jour uniquement les lignes que je le veux? – rockit

+0

Vous devez filtrer sur les lignes que vous souhaitez mettre à jour, et non sur toutes les lignes correspondantes. Exemple: les tables ont-elles une clé commune? – gbn

0

Vos deux tables ont juste besoin d'une jointure:

UPDATE m SET m.Field = o.Field 
FROM MyTable m INNER JOIN otherTable o ON m.JoinedField=o.JoinedField