it-swarm-eu.dev

Export dat tabulky z jednoho serveru SQL do druhého

Mám dva SQL servery (obě verze 2005).

Chci přenést několik tabulek z jednoho na druhý.

Zkusil jsem:

  • Na zdrojovém serveru jsem kliknul na databázi, vybral jsem Tasks/Generate scripts. Problém je v tom, že pod Table/View options neexistuje žádná volba Script data.

  • Pak jsem použil Script Table As/Create script pro generování SQL souborů, abych vytvořil tabulky na mém cílovém serveru. Ale stále potřebuji všechna data.

Pak jsem se pokusil použít:

SELECT * 
INTO [destination server].[destination database].[dbo].[destination table] 
FROM [source server].[source database].[dbo].[source table]

Mám však chybu:

Objekt obsahuje více než maximální počet předpon. Maximální hodnota je 2.

Může mi někdo prosím ukázat správné řešení mého problému?

49
no9

Zkuste to:

  1. vytvořte tabulku na cílovém serveru pomocí skriptů z kroku Script Table As / Create Script

  2. na cílovém serveru pak můžete vydat příkaz T-SQL:

    INSERT INTO dbo.YourTableNameHere
       SELECT *
       FROM [SourceServer].[SourceDatabase].dbo.YourTableNameHere
    

To by mělo fungovat dobře.

52
marc_s

Chcete-li zobrazit ještě další možnost (pro SQL Server 2008 a vyšší):

  1. klikněte pravým tlačítkem myši na Databáze -> vyberte 'Úkoly' -> vyberte 'Generovat skripty'
  2. Vyberte konkrétní databázové objekty, které chcete kopírovat. Řekněme jednu nebo více tabulek. Klepněte na tlačítko Další
  3. Klepněte na tlačítko Upřesnit a přejděte na položku Typy dat do skriptu a vyberte možnost Schéma a data. Klepněte na tlačítko OK
  4. Vyberte, kam se má generovaný skript uložit a pokračujte klepnutím na tlačítko Další
36
Konstantin

V Tasks/Generate scripts je volba skriptovací tabulky! Také jsem to ztratil na začátku! Ale můžete zde generovat vkládané skripty (velmi pěkný prvek, ale ve velmi neintuitivním prostředí).

Když se dostanete ke kroku "Nastavení možností skriptování", přejděte na kartu Pokročilé. 

Kroky popsané tady (obrázky mohou pochopit, ale já psám v lotyšštině tam).

9
Jānis

Zkuste použít SQL Server Import a export Wizard (pod Úkoly -> Exportovat data).

Nabízí vytvoření tabulek v cílové databázi. Zatímco, jak jste viděli, průvodce skriptováním může vytvořit pouze strukturu tabulky.

6

Pokud jsou tabulky již vytvořeny pomocí skriptů, je zde další způsob kopírování dat pomocí příkazu BCP ke kopírování všech dat ze zdrojového serveru do cílového serveru. 

Export dat tabulky do textového souboru na zdrojovém serveru:

bcp <database name>.<schema name>.<table name> OUT C:\FILE.TXT -c -t -T -S <server_name[ \instance_name]> -U <username> -P <Password> 

Import dat tabulky z textového souboru na cílovém serveru:

bcp <database name>.<schema name>.<table name> IN C:\FILE.TXT -c -t -T -S <server_name[ \instance_name]> -U <username> -P <Password>
5
praveen

Jen na kopy.

Vzhledem k tomu, že jsem nebyl schopen vytvořit propojený server a protože připojení k produkčnímu serveru nestačilo k použití INSERT INTO, udělal jsem následující:

  • vytvořil zálohu databáze produkčního serveru
  • obnovena databáze na mém testovacím serveru
  • provedl vložení do výkazů

Je to backdoor řešení, ale protože jsem měl problémy, že pracoval pro mě.

Protože jsem vytvořil prázdné tabulky pomocí SCRIPT TABLE AS / CREATE za účelem převodu všech klíčů a indexů, nemohl jsem použít SELECT INTO. SELECT INTO funguje pouze v případě, že tabulky v cílovém umístění neexistují, ale nekopírují klíče a indexy, takže je musíte provést ručně. Nevýhodou použití příkazu INSERT INTO je, že musíte ručně poskytnout všechny názvy sloupců a navíc vám může způsobit problémy, pokud některá omezení cizích klíčů selžou.

Díky všem anwsers, tam jsou některé skvělé řešení, ale já jsem se rozhodl přijmout marc_s anwser.

2
no9

To lze provést prostřednictvím "Import/Export dat ..." v SQL Server Management Studio

2
Vil

Nelze vybrat zdrojový/cílový server.

Pokud jsou databáze na stejném serveru, můžete to provést takto:

Pokud jsou sloupce tabulky stejné (včetně objednávky!), Můžete to provést takto:

INSERT INTO [destination database].[dbo].[destination table]
SELECT *
FROM [source database].[dbo].[source table]

Pokud to chcete provést jednou, můžete zálohovat/obnovit zdrojovou databázi. Pokud to potřebujete provádět častěji, doporučujeme vám spustit projekt SSIS, ve kterém definujete zdrojovou databázi (zde si můžete vybrat libovolné připojení na libovolném místě). serveru) a vytvořte projekt, do kterého tam přesunete svá data. Více informací naleznete zde: http://msdn.Microsoft.com/en-us/library/ms169917%28v=sql.105%29 .aspx

2
YvesR

To je trochu řešení, ale fungovalo to pro mě doufám, že to bude fungovat i pro ostatní:

Můžete spustit dotaz SQL vyberte v tabulce, kterou chcete exportovat, a výsledek uložte jako .xls ve vašem disku.

Nyní vytvořte tabulku, do které chcete přidat data se všemi sloupci a indexy. To lze snadno provést pravým kliknutím na aktuální tabulku a výběrem možnosti Vytvořit do skriptu.

Nyní můžete kliknout pravým tlačítkem na DB, kam chcete tabulku přidat, a vybrat Úkoly> Importovat.

Otevře se Průvodce importem exportu a vyberte další. Jako vstupní zdroj dat vyberte položku Microsoft Excel a poté vyhledejte soubor XLS, který jste uložili dříve.

Nyní vyberte cílový server a také cílovou tabulku, kterou jsme již vytvořili.

Poznámka: Pokud existuje nějaké pole založené na identitě, můžete v cílové tabulce odebrat vlastnost identity, protože tato data budou také vložena. Takže pokud jste měli tento jako Identity vlastnost pouze pak by se chyba v procesu importu.

Nyní stiskněte následující tlačítko a stiskněte tlačítko Dokončit a ukáže vám, kolik záznamů se importuje, a v případě, že se nevyskytnou žádné chyby, vrátíte úspěch.

1
sinod

Pro kopírování dat ze zdroje do místa určení:

use <DestinationDatabase>
select * into <DestinationTable> from <SourceDataBase>.dbo.<SourceTable>
1
David Brabant

Další možnost, pokud máte k dispozici: c # .net. Zejména obor názvů Microsoft.SqlServer.Management.Smo.

Používám kód podobný následujícímu ve složce skriptu jednoho z mých balíčků SSIS. 

var tableToTransfer = "someTable";
var transferringTableSchema = "dbo";

var srvSource = new Server("sourceServer");
var dbSource = srvSource.Databases["sourceDB"];

var srvDestination = new Server("destinationServer"); 
var dbDestination = srvDestination.Databases["destinationDB"];

var xfr = 
    new Transfer(dbSource) {
        DestinationServer = srvDestination.Name,
        DestinationDatabase = dbDestination.Name,
        CopyAllObjects = false,
        DestinationLoginSecure = true,
        DropDestinationObjectsFirst = true,
        CopyData = true
    };

xfr.Options.ContinueScriptingOnError = false; 
xfr.Options.WithDependencies = false; 

xfr.ObjectList.Add(dbSource.Tables[tableToTransfer,transferringTableSchema]);
xfr.TransferData();

Myslím, že jsem musel explicitně hledat a přidávat knihovnu Microsoft.SqlServer.Smo do odkazů. Ale mimo to to pro mě fungovalo.

AktualizaceJmenný prostor a knihovny byly složitější, než jsem si pamatoval.

Pro knihovny přidejte odkazy na:

  • Microsoft.SqlServer.Smo.dll
  • Microsoft.SqlServer.SmoExtended.dll
  • Microsoft.SqlServer.ConnectionInfo.dll
  • Microsoft.SqlServer.Management.Sdk.Sfc.dll

Pro jmenné prostory přidejte:

  • Microsoft.SqlServer.Management.Common
  • Microsoft.SqlServer.Management.Smo
0
pwilcox

Pokud nemáte oprávnění k propojení serverů, zde jsou kroky pro import tabulky z jednoho serveru do druhého pomocí Průvodce importem/exportem serveru SQL:

  • Klikněte pravým tlačítkem myši na zdrojovou databázi, ze které chcete kopírovat.
  • Vyberte Úkoly - Exportovat data.
  • Vyberte Sql Server Nativní klient ve zdroji dat.
  • Vyberte typ ověření (Sql Server nebo ověřování systému Windows).
  • Vyberte zdrojovou databázi.
  • Dále vyberte cíl: Sql Server Nativní klient
  • Zadejte název serveru (server, do kterého chcete kopírovat tabulku).
  • Vyberte typ ověření (Sql Server nebo ověřování systému Windows).
  • Vyberte cílovou databázi.
  • Vyberte možnost Kopírovat data.
  • Ze seznamu vyberte svou tabulku.
  • Klepněte na tlačítko Další, vyberte možnost Spustit okamžitě nebo volitelně můžete balíček také uložit do souboru nebo serveru SQL, pokud jej chcete spustit později.
  • Dokončit
0
live-love