2014-06-24 3 views
0

Outre l'Assistant Importation et Exportation, existe-t-il une requête pour transférer une table d'un serveur vers un autre serveur dans SQL Server 2008?Transférer une table d'un serveur vers un autre serveur

SELECT * INTO [Server1].[db_name].[dbo].[table_name] 
FROM [Server2].[db_name].[dbo].[table_name] 
+0

serveur lié et 4 noms partie comme vous le montrer. Mon expérience est que c'est plus efficace sur le serveur. – Paparazzi

Répondre

1

Il y a plusieurs options. Si vous disposez des autorisations appropriées, vous pouvez créer un serveur lié suivant les instructions ici: http://msdn.microsoft.com/en-us/library/ff772782.aspx

puis utilisez OPENQUERY (http://msdn.microsoft.com/en-us/library/ms188427.aspx) pour sélectionner les enregistrements:

SELECT * INTO new_db.new_schema.new_table 
FROM OPENQUERY(linked_server_name, 'select * from old_db.old_schema.old_table'); 

Ou vous pouvez faire quelque chose de similaire avec OPENROWSET (http://technet.microsoft.com/en-us/library/ms190312.aspx) si vous ne voulez pas passer par la mise en place du serveur lié:

SELECT * INTO new_db.new_schema.new_table 
FROM OPENROWSET('SQLNCLI', 'Server=OldServer;Trusted_Connection=yes;', 
    'select * from old_db.old_schema.old_table'); 

les deux peuvent nécessiter quelques ajustements en fonction de la méthode d'authentification que vous utilisez, les noms d'utilisateur, privile ges, et tout ça.

0

En supposant que vous pouvez vous connecter à Server1, et une configuration de serveur lié à Server2, une autre option est OPENQUERY.

SELECT * 
INTO [db_name].[dbo].[table_name] 
FROM OPENQUERY([Server2], 'select * from [db_name].[dbo].[table_name]') 

Gardez à l'esprit que ceci ne copiera pas les index/statistiques. Ceux-ci devraient être scénarisés et recréés.

Si vous devez les synchroniser, j'examinerais la réplication SQL.

+0

Si la table a une colonne IDENTITY, vous pouvez également conserver ces valeurs en ajoutant SET IDENTITY_INSERT nom_table ON ... (insérer) ... SET IDENTITY_INSERT nom_table OFF –

+1

Vous n'avez pas besoin de cela sur SELECT ... INTO ... ', mais vous le feriez si la table existait et que vous vouliez 'INSERT INTO ...'. – JiggsJedi

0

Vous pouvez définir un serveur lié à Server2 à l'intérieur server1, puis exécutez la requête dans server1:

SELECT * INTO [db_name].[dbo].[table_name] 
FROM [Server2].[db_name].[dbo].[table_name] 

En savoir plus sur les serveurs liés: http://msdn.microsoft.com/en-us/library/ms188279.aspx

0

En supposant que server1 et server2 sont sql server, vous n'avez pas besoin de openquery. Créer un serveur lié sur server1 pour server2 et écrire requête

select * dans server1.schema.table_name de server2.schema.table_name

Questions connexes