Qu'est ce qu'un “INSÉRER IGNORER” équivalent à MS SQL Server?
Je suis en train d'insérer des enregistrements dans la base de données MySQL à partir d'un Serveur MS SQL server à l'aide de la "OPENQUERY" mais ce que j'essaie de faire est d'ignorer le double des clés de messages. ainsi, lorsque l'exécution de la requête dans une copie, puis de les ignorer et de continuer.
Quelles sont les idées qui puis-je faire pour ignorer les doublons?
Ici est ce que je fais:
- tirant des enregistrements à partir de MySQL à l'aide de "OpenQuery" pour définir MySQL "A. record_id"
- Joindre ces documents à des enregistrements dans MS SQL Server "avec des critères précis et pas direct id" a partir de là j'ai trouver un nouveau "B. nouvelle_id" code d'identification de dossier dans SQL Server.
- Je veux insérer les résultats dans une nouvelle table dans MySQL comme A. record_id, B. nouvelle_id Ici, dans la nouvelle table, j'ai A. record_id défini comme clé primaire de cette table.
Le problème est que lors de l'adhésion d'Un tableau à Tableau B, à certains moments, j'ai trouver 2+ enregistrements dans la table B correspondant aux critères que je suis à la recherche de ce qui provoque la valeur A. record_id à 2 fois dans mon jeu de données avant de les insérer dans Une table qui provoque le problème. Remarque je peux utiliser la fonction d'agrégation pour éliminer les enregistrements.
IGNORE_DUP_KEY
est une propriété d'un index. Pas un mot clé que vous utilisez dans une requête. Il n'est pas pertinent, sauf si vous êtes l'insertion de SQL Server donc demande de clarification sur le sens du transfert.OriginalL'auteur Jaylen | 2014-01-19
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas qu'il y est une option spécifique. Mais il est assez facile à faire:
Si il n'y a plus qu'un jeu de clés uniques, vous pouvez ajouter d'autres
not exists
consolidés.EDIT:
Pour la version révisée du problème:
La
row_number()
fonction attribue un numéro d'ordre à chaque ligne au sein d'un groupe de lignes. Le groupe est défini par lapartition by
déclaration. Les numéros commencent à 1 et d'un incrément à partir de là. Leorder by
clause dit que vous ne se soucient pas de l'ordre. Exactement une ligne à chaque id aura une valeur de 1. Dupliquer les lignes auront une valeur plus grande que un. Leseqnum = 1
choisit exactement une ligne par id.Pouvez-vous nous expliquer la deuxième requête? Je n'ai jamais utilisé over (partition by ..... Je ne sais pas ce qu'il est et ce qu'il fait. J'ai besoin de savoir comment puis-je l'appliquer à ma requête..
C'est encore aujourd'hui de travailler pour moi. J'ai réitéré ma question pour expliquer le problème que je suis en cours d'exécution. veuillez passer en revue. Je pense que votre réponse est sur la bonne voie
Je pense que la fonction row_number() over..... de tresorerie ne fonctionne pas comme vous vous attendez, parce que je vois 2 lignes avec le même id et ont une valeur de 1 comme
"il est assez facile à faire," sauf que n'est pas du tout aussi simple que d'INSÉRER IGNORER. Il est tout à fait odieux.
OriginalL'auteur Gordon Linoff
Si vous êtes sur SQL Server 2008+, vous pouvez utiliser
MERGE
faire unINSERT
si la ligne n'existe pas, ou unUPDATE
.Exemple:
La Question et le Titre sont source de confusion, et en face. J'ai regardé le titre s' @Mike demande
INGORE INSERT
équivalent de MySQL, SQL Server. Alors que la Question est à dire à l'opposé, c'est à dire l'insertion dans MySQL à partir de SQL Server.OriginalL'auteur Barb C. Goldstein