0
votes

Mettre à jour une colonne d'une table avec une colonne d'une autre table dans SQL Server

J'essaie de mettre à jour la colonne d'une table à une autre table de différentes bases de données.

J'ai recherché sur la pile mais trouvé des réponses pour PostgreSQL et SQLite. Ce code n'est pas fonctionné correctement pour moi dans SQL Server.

dire,

  • D1, D2 sont les deux bases de données différentes
  • T1 est la table
  • C1, C2, C3 sont les colonnes de T1

    Je veux mettre à jour comme xxx

    tout sauf le clause fonctionne bien.

    ici est un certain code que j'ai essayé: xxx

    Comment écrirai-je cette requête?

    Note: D1 et D2 sont identiques. Les deux ont exactement le même schéma. Juste le nom et les données sont différents. Les deux bases de données sont sur le même serveur.


0 commentaires

3 Réponses :


2
votes

SQL Server prend en charge une syntaxe de jointe de jointure: xxx pré>

En réalité, votre approche actuelle pourrait fonctionner, mais vous devriez essayer de le modifier à ceci: P>

UPDATE TABLE1 D1.t1
SET COL1 = (SELECT t2.COL1 FROM TABLE2 D2.t2 WHERE T1.COL2 = T2.COL2);


11 commentaires

J'ai vu cela dans un post récemment mais j'ai un doute ... pourquoi rejoindre et non une clause d'où?


@RITASHROFF Chaque base de données utilise une syntaxe légèrement différente, elle appartient aux créateurs de SQL Server. Dans tous les cas, vous pouvez essayer mes deux réponses et voir si vous travaillez pour vous.


La première version doit fonctionner et pourrait être le moyen le plus efficace d'écrire votre requête de mise à jour dans SQL Server.


"J'ai vu cela dans un post récemment pourquoi rejoindre et non une clause d'origine?" seconde de la base de données de la base de données Il suit plus les normes SQL Je crois, première requête pour la plupart des performances, mais vous perdrez la portablité de la base de données Base de données MySQL @RITASHROFF MySQL Par exemple utilise une autre commande de syntaxe mise à jour , ensemble interne .. Ensemble .. . Je ne crois pas que la mise à jour de la syntaxe de la syntaxe comme celle-ci est incluse dans les normes SQL, je pourrais avoir une erreur, cela pourrait être dans le dernier .. De plus, la norme SQL n'est que des fournisseurs de base de données des lignes directrices peuvent choisir de mettre en œuvre quelque chose ou non ou pour ajouter des fonctionnalités ( dialecte) sur le dessus.


@Timbiegeleisen oui mais j'ai eu une erreur. Identifiant multipart D1.DBO.T1.C1 n'a pas pu être lié. J'ai essayé d'utiliser une jointure intérieure. Mais j'ai une base de données différente. Donc, la 2nd ligne que j'ai écrite Set col1 = d1.t1.c1 Notez que j'ai une base de données différente avec le même nom de table et de colonne


@Raymondnijland Ouais je pense que la 2ème option fonctionnera pour moi.


@RITASHROFF Essayez une sous-requête de mise à jour co-quantifiée entièrement quantifiée. update d2.t2.c1 SET D2.T2.C1 = (SELECT D1.T1.C2 à partir de d2.T1 où d2.t1.c2 = d1.t1.c2) alors vous n'avez pas Pour utiliser Utiliser la base de données d'abord, cette méthode doit également fonctionner pour la première requête.


@TimbieGeleisen Le code que vous venez de modifier est en réalité la 2ème option. Mais vous avez dit la première version doit fonctionner et peut être le moyen le plus efficace d'écrire votre requête de mise à jour dans SQL Server. J'ai donc essayé le 1er 1.


@TimbieGeleisen 2e option a fonctionné. Pouvez-vous s'il vous plaît éditer votre message et supprimer l'option de jointure intérieure afin que je puisse la marquer comme réponse.?


Je ne le supprimerai pas, mais je l'ai modifiée pour utiliser le nom de la base de données. Comme je l'ai déjà mentionné, la Syntaxe de mise à jour est probablement le moyen le plus efficace d'écrire la mise à jour dans SQL Server. Il devrait donc rester ici.


@TimbieGeleisen ok



0
votes

Vous pouvez simplement utiliser un interne interne cause Prise en charge des requêtes multi-bases de données, de sorte que vous puissiez faire comme suit: xxx

s'il vous plaît, visitez et lisez Demandes transversales < / code> .


0 commentaires

0
votes

ou Mettre à jour le nom de nom de nom de la colonne = (Sélectionnez le nom de la colonne de la deuxième table où 1 = 1) i.e condition est true ou faste optionnel si


0 commentaires