2013-02-12 7 views
16

Ich versuche, Daten aus einer Datenbank in einem Server in eine neue Tabelle auf einem anderen Server zu importieren, mithilfe von SQL Server-Import und Export-Assistenten. (SQL Server Management Studio 2012)Quellentyp 200 in SQL Server-Import und Export-Assistent?

im Assistenten geprüft I „eine Abfrage, um die Daten zu spezifizieren zu übertragen“, und die SQL-Anweisung gibt Daten die folgenden vier Spalten enthalten:

+-----------------------------------------------------------------------------+ 
| ID(varchar(100)) | Title(text) | Description(text) | IsActive(tinyint)| 
+-----------------------------------------------------------------------------+ 

Ich mag die Typen für die neue Tabelle in der "Spalte Mappings" Seite

+----------------------------------------------------------------------------------------+ 
| ID(varchar(4)) | Title(varchar(200)) | Description(varchar(2000)) | IsActive(bit)| 
+----------------------------------------------------------------------------------------+ 

So zu ändern (in der "Select Source Tables und Ansichten" Seite, ich klickte "bearbeiten Mappings ...") , Ich habe den Zieltyp auf die obigen Typen geändert. Dann, nach „Weiter“, in der „Bewertungsdatentypzuordnung“ Seite klicken, erhalte ich einen Fehler, der „Found 3 unknown column type conversion(s). You are only allowed to save the package

Die Datentypzuordnung zeigt die folgenden Informationen sagt:

icon Source Column Source Type Destination Column Destination Type Convert 
---------------------------------------------------------------------------------- 
error ID    200   ID     varchar 
error Title   200   Title     varchar 
error Description  201   Description   varchar 
warning IsActive   tinyint  IsActive    bit  

Auch wenn Ich ändere den Datentyp nicht in der "Edit Mappings ..." Seite, ich bekomme den gleichen Fehler.

Ich verstehe nicht, was "200" im Zusammenhang mit einem Datentyp bedeutet, und wie kann ich diese Daten in eine neue Tabelle in einem anderen Server importieren?

Ich schätze jede Hilfe.

Antwort

4

Ich wette, dass Textspalten nicht mit dem Assistenten in Varchar-Spalten eingefügt werden können. Abhängig davon, wie groß die Tabelle ist, können Sie die Quelle über das SSMS nach csv exportieren und dann importieren. Das sollte funktionieren, aber wenn Sie mehrere Tabellen importieren möchten, können Sie einen Verbindungsserver hinzufügen. Dann können Sie einfach die alte Tabelle qualifizieren oder die neue Tabelle wie folgt aus:

insert into [new_server].database.dbo.tablename 
select * from old_table 

Ich weiß SQL2000 ein Schmerz ist für die Erstellung von verknüpften Servern obwohl das ist, was ich vermute, Sie versuchen, aus den Export, da Sie Text haben Säulen.

+0

Danke. Ich habe mich gefragt, ob Es ist einfach unmöglich, mit dem Assistenten zu importieren, oder es gab eine Möglichkeit, den Assistenten zu arbeiten, aber diese Lösung funktioniert so einfach wie der Assistent :) – kabichan

+0

Stellen Sie sicher, dass Sie die Identität einfügen, wenn Sie Sie müssen dieselbe PK in der importierten Tabelle behalten. 'SET IDENTITY_INSERT DestinationTableName ON'. Nachdem Ihre Abfrage wie oben strukturiert wurde, schalten Sie sie wieder aus.' SET IDENTITY_INSERT DestinationTableName OFF' – Tommy

13
+1

Funktioniert mit SQL Server 2008 R2 Verwalten Studio. Sie haben es mit SQL Server 2012 eingeführt .. und immer noch ein Problem. Irgendwie ein großer Bug .. kann nicht glauben, dass sie es noch nicht angesprochen haben! –

25

Mit ein wenig Experimentieren dieser Fehler scheint nur auftreten, wenn Sie eine Frage haben als Quelle. Die angenommene Antwort funktionierte für mich nicht, da das Kopieren in eine flache Datei denselben Fehler zur Folge hätte.

Um dies zu lösen, stelle ich meine Abfrage in eine View dann Copy From one or more Tables Or Views statt Write a query... ausgewählt.

Ich ging durch die Assistenten normalerweise danach und meine Daten gingen ohne Fehler durch

+2

Dies ist der absolut richtige Weg, um diesen hässlichen zeitraubenden Microsoft-Bug zu umgehen.Sie verdienen ein Bier Sir – Batu

+0

Gerettet mein Arsch ... danke – kstubs

+0

Brilliant! hatte dieses Problem versucht, einige Daten zu verschieben, die einen Datentyp von Text hatten ... arbeitete wie ein Charme! Danke @Shoe – Eli

5

eine langfristige Lösung (neben Microsoft es Fixing) (oder haben sie schon?) ist auch ein paar Links tief aus die Antworten geschrieben.

Auf dem betroffenen Computer gibt es eine XML-Datei, die eine Code-zu-Wert-Zuordnung für jeden Transformationstyp definiert.
Was mit dem "200" & "201" gesehen wird, verursacht einen Fehler, ist eine fehlende Zuordnung
.... naja, es hätte nicht als "200/201" durchkommen sollen, aber so wie wir es gemacht haben wünschte, es wäre kartiert

Es kann manuell eingefügt werden, wenn Sie bereit sind, mit solchen Konfigurationen zu spielen.

Hier ist, wo ich die Antwort bekam, recht weit unten auf der Seite: http://social.msdn.microsoft.com/Forums/sqlserver/en-US/97ff1f01-c02a-4c9a-b867-8eaecc464cfb/2012-sp1-no-longer-recognizes-common-data-types?forum=sqlintegrationservices

Die Mapping-Dateien sind in C: \ Program Files (x86) \ Microsoft SQL Server \ 110 \ DTS \ MappingFiles \
(oder gleichwertig)

Es gibt einen für jeden Typ der Quelle-zu-Ziel-Transformation.

Für zwischen SQL Server gehen, um diejenigen aussehen wie
MSSQLToSSIS10.XML
MSSql9ToMSSql8.xml
MSSql10ToMSSql9.xml

Wo Sie

<!-- varchar --> 
<dtm:DataTypeMapping > 
    <dtm:SourceDataType> 
     <dtm:DataTypeName>varchar</dtm:DataTypeName> 
    </dtm:SourceDataType> 
    <dtm:DestinationDataType> 
     <dtm:CharacterStringType> 
      <dtm:DataTypeName>DT_STR</dtm:DataTypeName> 
      <dtm:UseSourceLength/> 
     </dtm:CharacterStringType> 
    </dtm:DestinationDataType> 
</dtm:DataTypeMapping> 

Fügen Sie die "200" Mapping sehen so zu vergleichen, dass Sie am Ende mit

<!-- varchar --> 
<dtm:DataTypeMapping > 
    <dtm:SourceDataType> 
     <dtm:DataTypeName>varchar</dtm:DataTypeName> 
    </dtm:SourceDataType> 
    <dtm:DestinationDataType> 
     <dtm:CharacterStringType> 
      <dtm:DataTypeName>DT_STR</dtm:DataTypeName> 
      <dtm:UseSourceLength/> 
     </dtm:CharacterStringType> 
    </dtm:DestinationDataType> 
</dtm:DataTypeMapping> 
<dtm:DataTypeMapping > 
    <dtm:SourceDataType> 
     <dtm:DataTypeName>200</dtm:DataTypeName> 
    </dtm:SourceDataType> 
    <dtm:DestinationDataType> 
     <dtm:CharacterStringType> 
      <dtm:DataTypeName>DT_STR</dtm:DataTypeName> 
      <dtm:UseSourceLength/> 
     </dtm:CharacterStringType> 
    </dtm:DestinationDataType> 
</dtm:DataTypeMapping> 
enden

Fix nvarchar und andere auf die gleiche Weise!

3

Ich konnte dies umgehen, indem Sie Zeichenfelder als char (##) in der SQL-Anweisung und dann die Zieldatentypen in varchar (##) änderten. Die Felder müssen möglicherweise vor der Verwendung zugeschnitten werden, der Import funktioniert jedoch.

0

Die schnellste Lösung ist das Exportieren der Daten in eine neue Tabelle in der gleichen Datenbank (Quelle) mit dem Import/Export-Assistenten. Dann exportieren Sie die Daten aus der neuen Tabelle. Irgendwie funktioniert der Import/Export-Assistent zum Zeitpunkt der Erstellung der neuen Tabelle (nicht wirklich). Danke Jyoti für die Beendigung der Schmerzen war es, den Import/Export-Assistenten zu verwenden.

1

Sie müssen wirklich nicht mit Config, Ansichten oder was auch immer tun. Speichern Sie einfach das SSIS-Paket und führen Sie es durch Doppelklicken im Explorer aus. Dies startet die „Paketausführungsprogramm (DTExecUI.exe im ManagementStudio Ordner), die das Paket ohne Fehler ausgeführt werden soll.