Tabelgegevens exporteren van de ene SQL Server naar de andere

Ik heb twee SQL-servers (beide versie 2005).

Ik wil meerdere tabellen van de ene naar de andere migreren.

Ik heb geprobeerd:

  • Op de bronserver heb ik met de rechtermuisknop op de database geklikt, Tasks/Generate scriptsgeselecteerd.
    Het probleem is dat er onder Table/View optionsgeen optie Script datais.

  • Vervolgens gebruikte ik Script Table As/Create scriptom SQL-bestanden te genereren om de tabellen op mijn doelserver te maken. Maar ik heb nog steeds alle gegevens nodig.

Toen probeerde ik het volgende te gebruiken:

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

Maar ik krijg de foutmelding:

Object bevat meer dan het maximum aantal voorvoegsels. Maximaal is
2.

Kan iemand mij de juiste oplossing voor mijn probleem geven?


Antwoord 1, autoriteit 100%

Probeer dit:

  1. maak uw tabel op de doelserver met behulp van uw scripts uit de stap Script Table As / Create Script

  2. op de doelserver kunt u vervolgens een T-SQL-statement geven:

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

Dit zou prima moeten werken.


Antwoord 2, autoriteit 78%

Om nog een andere optie te laten zien (voor SQL Server 2008 en hoger):

  1. klik met de rechtermuisknop op Database -> selecteer ‘Taken’ -> selecteer ‘Scripts genereren’
  2. Selecteer specifieke database-objecten die u wilt kopiëren. Laten we zeggen een of meer tabellen. Klik op Volgende
  3. Klik op Geavanceerd en scrol omlaag naar ‘Typen gegevens naar script’ en kies ‘Schema en gegevens’. Klik op OK
  4. Kies waar u het gegenereerde script wilt opslaan en ga verder door op Volgende te klikken

Antwoord 3, autoriteit 14%

Er is een scripttabeloptie in Taken/Scripts genereren! Ik miste het ook in het begin! Maar je kunt daar invoegscripts genereren (erg leuke functie, maar op een erg on-intuïtieve plek).

Als u bij stap “Scripting-opties instellen” komt, gaat u naar het tabblad “Geavanceerd”.

Stappen beschreven hier(foto’s kunnen begrijpen, maar ik schrijf daar wel in het Lets).


Antwoord 4, autoriteit 13%

Probeer de SQL Server Wizard Importeren en exporterente gebruiken (onder Taken -> Gegevens exporteren).

Het biedt aan om de tabellen in de doeldatabase te maken. Terwijl, zoals je hebt gezien, de scriptwizard alleen de tabelstructuur kan maken.


Antwoord 5, autoriteit 13%

Als u geen toestemming heeft om servers te koppelen, volgen hier de stappen om een ​​tabel van de ene server naar de andere te importeren met behulp van de Sql Server Import/Export Wizard:

  • Klik met de rechtermuisknop op de brondatabase waaruit u wilt kopiëren.
  • Taken selecteren – Gegevens exporteren.
  • Selecteer SQL Server Native Client in de gegevensbron.
  • Selecteer uw authenticatietype (Sql Server- of Windows-authenticatie).
  • Selecteer de brondatabase.
  • Kies vervolgens de bestemming: Sql Server Native Client
  • Typ uw servernaam in (de server waarnaar u de tabel wilt kopiëren).
  • Selecteer uw authenticatietype (Sql Server- of Windows-authenticatie).
  • Selecteer de doeldatabase.
  • Selecteer Gegevens kopiëren.
  • Selecteer uw tafel uit de lijst.
  • Klik op Volgende, selecteer Direct uitvoeren, of optioneel kunt u het pakket ook opslaan in een bestand of Sql Server als u het later wilt uitvoeren.
  • Voltooien

Antwoord 6, autoriteit 8%

Als de tabellen al zijn gemaakt met behulp van de scripts, is er een andere manier om de gegevens te kopiëren door de BCP-opdracht te gebruiken om alle gegevens van uw bronserver naar uw doelserver te kopiëren

Om de tabelgegevens te exporteren naar een tekstbestand op de bronserver:

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

Om de tabelgegevens uit een tekstbestand op de doelserver te importeren:

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

Antwoord 7, autoriteit 4%

Voor het kopiëren van gegevens van bron naar bestemming:

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

Antwoord 8, autoriteit 4%

Voor de kick.

Omdat ik geen gekoppelde server kon maken en omdat alleen verbinding maken met de productieserver niet voldoende was om INSERT INTOte gebruiken, deed ik het volgende:

  • een back-up gemaakt van de productieserverdatabase
  • de database op mijn testserver hersteld
  • het invoegen in instructies uitgevoerd

Het is een achterdeuroplossing, maar aangezien ik problemen had, werkte het voor mij.

Sinds ik lege tabellen heb gemaakt met behulp van SCRIPT TABLE AS / CREATEom alle sleutels en indexen over te dragen, kon ik SELECT INTOniet gebruiken. SELECT INTOwerkt alleen als de tabellen niet bestaan ​​op de bestemmingslocatie, maar het kopieert geen sleutels en indexen, dus je moet dat handmatig doen. Het nadeel van het gebruik van de INSERT INTO-instructie is dat u handmatig alle kolomnamen moet invoeren, en het kan u problemen opleveren als bepaalde beperkingen voor externe sleutels niet werken.

Bedankt aan alle anwsers, er zijn een aantal geweldige oplossingen, maar ik heb besloten om marc_s anwser te accepteren.


Antwoord 9, autoriteit 3%

Je kunt geen bron-/bestemmingsserver kiezen.

Als de databases zich op dezelfde server bevinden, kunt u dit doen:

Als de kolommen van de tabel gelijk zijn (inclusief volgorde!) dan kun je dit doen:

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

Als u dit eenmalig wilt doen, kunt u een back-up maken van de brondatabase en deze herstellen.
Als u dit vaker moet doen, raad ik u aan een SSIS-project te starten waarin u de brondatabase definieert (daar kunt u elke verbinding op elke server kiezen) en een project te maken waarin u uw gegevens daarheen verplaatst.
Bekijk hier meer informatie: http://msdn. microsoft.com/en-us/library/ms169917%28v=sql.105%29.aspx


Antwoord 10, autoriteit 3%

Het kan worden gedaan via “Gegevens importeren/exporteren…” in SQL Server Management Studio


Antwoord 11

Dit is een beetje een oplossing, maar het werkte voor mij, ik hoop dat het voor anderen ook werkt voor dit probleem:

U kunt de geselecteerde SQL-query uitvoeren op de tabel die u wilt exporteren en het resultaat opslaan als .xls in uw schijf.

Maak nu de tabel waaraan u gegevens wilt toevoegen met alle kolommen en indexen. Dit kan eenvoudig worden gedaan door met de rechtermuisknop op de eigenlijke tabel te klikken en de optie Maken naar script te selecteren.

Nu kunt u met de rechtermuisknop op de DB klikken waar u uw tabel wilt toevoegen en Taken>Importeren selecteren.

De wizard Importeren Export wordt geopend en selecteer volgende. Selecteer Microsoft Excel als invoergegevensbron en blader en selecteer het .xls-bestand dat u eerder hebt opgeslagen.

Selecteer nu de bestemmingsserver en ook de bestemmingstabel die we al hebben gemaakt.

Opmerking: als er een op identiteit gebaseerd veld is, wilt u in de bestemmingstabel wellicht de identiteitseigenschap verwijderen, aangezien deze gegevens ook worden ingevoegd. Dus als je deze alleen als identiteitseigenschap had, dan zou het importproces fout gaan.

Klik nu op volgende en druk op voltooien en het zal je laten zien hoeveel records worden geïmporteerd en succes retourneren als er geen fouten optreden.


Antwoord 12

Nog een andere optie als je die beschikbaar hebt: c# .net. In het bijzonder de Microsoft.SqlServer.Management.Smo-naamruimte.

Ik gebruik code die lijkt op de volgende in een scriptcomponent van een van mijn SSIS-pakketten.

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();

Ik denk dat ik expliciet moest zoeken naar en de bibliotheek Microsoft.SqlServer.Smo moest toevoegen aan de referenties. Maar buiten dat, is dit voor mij gelukt.

Update: de naamruimte en bibliotheken waren ingewikkelder dan ik me herinnerde.

Voor bibliotheken, voeg verwijzingen toe naar:

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

Voeg voor de naamruimten toe:

  • Microsoft.SqlServer.Management.Common
  • Microsoft.SqlServer.Management.Smo

Other episodes