erreur lors de l'insertion dans serveur lié
Je veux insérer quelques données sur le serveur local vers un serveur distant, et utilisé le code sql suivant:
select * into linkservername.mydbname.dbo.test from localdbname.dbo.test
Mais il génère l'erreur suivante
Le nom de l'objet 'linkservername.mydbname.dbo.test' contient plus que le nombre maximum de préfixes. Le maximum est de 2.
Comment puis-je le faire?
OriginalL'auteur Daniel Wu | 2011-01-20
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que la nouvelle table créée avec le
INTO
clause de prise en charge de 4 noms de partie.Vous devez créer d'abord la table, puis utilisez
INSERT..SELECT
pour la remplir.(Voir la note dans la section Arguments sur MSDN: référence)
merci, lien révisé
OriginalL'auteur richaux
La
SELECT...INTO [new_table_name]
instruction prend en charge un maximum de 2 préfixes:[database].[schema].[table]
REMARQUE: il est plus performant pour extraire les données à travers le lien à l'aide de
SELECT INTO
vs poussant à travers l'aideINSERT INTO
:SELECT INTO
est faiblement connecté.SELECT INTO
ne pas implicitement démarrer une transaction distribuée, généralement.Je dis généralement, dans le point n ° 2, parce que dans la plupart des scénarios d'une transaction distribuée n'est pas créé implicitement lors de l'utilisation de
SELECT INTO
. Si une trace du générateur de profils vous indique SQL Server est toujours implicitement la création d'une transaction distribuée, vous pouvezSELECT INTO
une table temp d'abord, pour éviter l'implicite de transactions distribuées, puis déplacer les données dans votre table cible à partir de la table temp.Poussée contre Pull Exemple
Dans cet exemple, nous la copie de données à partir de [server_a] [serveur_b] à travers un lien. Cet exemple suppose que l'exécution de la requête est possible à partir de deux serveurs:
Pousser
Au lieu de se connecter à [server_a] et en poussant les données pour [serveur_b]:
Pull
Se connecter à [serveur_b] et extraire les données à partir de [server_a]:
OriginalL'auteur 2Toad
J'ai connu le même problème, et j'ai effectué la solution de contournement suivante:
Si vous êtes en mesure de se connecter à un serveur distant où vous souhaitez insérer des données avec MSSQL ou sqlcmd et reconstruire votre requête vice-versa:
donc à partir de:
à la suivante:
Dans ma situation, il fonctionne bien.
@2Toad: INSERT INTO mieux /plus efficace. Cependant, pour les petites requêtes et rapide opération SELECT * INTO est plus souple car il crée la table à la volée et insérer vos données immédiatement, alors que les INSERT INTO nécessite la création d'une table (auto-ident options et ainsi de suite) avant de réaliser votre opération d'insertion.
OriginalL'auteur essential
J'ai eu du mal avec ce pour la dernière heure.
Je me rends compte maintenant que l'utilisation de la syntaxe
ne fonctionne pas avec les serveurs liés. Vous devez aller sur votre serveur lié et créer manuellement la table d'abord, puis utilisez la syntaxe suivante:
OriginalL'auteur Asher
Je suis peut être en retard à la fête, mais c'était le premier post que j'ai vu quand j'ai cherché le 4 de la partie nom de la table insérer question à un serveur lié. Après la lecture de ceci et un peu plus de postes, j'ai pu accomplir cela en utilisant EXEC avec le "AT" argument (pour SQL2008+), de sorte que la requête est exécutée à partir du serveur lié. Par exemple, j'ai eu insérer 4M enregistrements à une pseudo-table temporaire sur un autre serveur, et de faire une INSÉREZ-SÉLECTIONNEZ à PARTIR de l'instruction a pris plus de 10 minutes. Mais toute modification à la suivante, SÉLECTIONNEZ-la DANS la déclaration, ce qui permet à la partie 4 nom de la table dans la clause from, il le fait en quelques secondes (moins de 10 secondes dans mon cas).
La requête est exécutée sur DestinationServer, les changements à la base de données, assure que la table n'existe pas déjà, et sélectionne à partir de la Doit. Journalisées, et pas de chichi. Cette information peut-être déjà là, quelque part, mais j'espère que cela aide quelqu'un à la recherche pour des problèmes similaires.
OriginalL'auteur BlueGI