|
Generieren von INSERT-Anweisungen für eine Tabelle
Der SQL Server bietet eine ganze Reihe von Möglichkeiten, die
Daten aus einer Tabelle zu exportieren und auf einem anderen Server wieder zu importieren.
Für Test oder Schulungszwecke wäre es jedoch oftmals schön ein Werkzeug zu haben, mit dem aus den
Daten einer bestehenden Tabelle automatisch die entsprechenden INSERT-Anweisungen erzeugt werden, mit denen
die Tabelle zu einem späteren Zeitpunkt per INSERT wieder gefüllt werden kann.
Die gespeicherte Prozedur sp_generateInsertStatementsForTable
(die Sie gerne auch downloaden können),
erfüllt genau diese Aufgabe. Als Parameter werden der Name der Tabelle und die maximale Zahl an Zeilen, die exportiert werden sollen angegeben.
Mit Hilfe eines bcp queryout-Aufrufs können die Scripte so recht einfach in Textdateien geschrieben werden.
Aufruf der Prozedur
Die Prozedur erwartet als Parameter den Namen der Tabelle, für die die INSERT-Anweisungen generiert werden sollen.
Optional kann noch die maximal zu generierende Zahl von INSERT-Anweisungen angegeben werden. Wird dieser
Parameter nicht angegeben, so werden bis zu 100 Anweisungen erzeugt.
Beispielaufruf:
USE northwind
EXEC sp_generateInsertStatements 'orders', 2
Ergebnis:
INSERT INTO [orders] ([OrderID], [CustomerID], [EmployeeID], [OrderDate], [RequiredDate], [ShippedDate], [ShipVia], [Freight], [ShipName], [ShipAddress], [ShipCity], [ShipRegion], [ShipPostalCode], [ShipCountry]) VALUES ( 10248, N'VINET', 5, '1996-07-28 00:00:00.000', '1996-08-01 00:00:00.000', '1996-07-16 00:00:00.000', 3, 32.3800, N'Vins et alcools Chevalier', N'59 rue de l''Abbaye', N'Reims', NULL, N'51100', N'France')
INSERT INTO [orders] ([OrderID], [CustomerID], [EmployeeID], [OrderDate], [RequiredDate], [ShippedDate], [ShipVia], [Freight], [ShipName], [ShipAddress], [ShipCity], [ShipRegion], [ShipPostalCode], [ShipCountry]) VALUES ( 10249, N'TOMSP', 6, '1996-07-29 00:00:00.000', '1996-08-16 00:00:00.000', '1996-07-10 00:00:00.000', 1, 11.6100, N'Toms Spezialitäten', N'Luisenstr. 48', N'Münster', NULL, N'44087', N'Germany')
Einschränkungen
Soll das Script später ausgeführt werden, so sollten jedoch einige Einschränkungen beachtet werden
Nicht unterstützte Feldtypen
In der aktuellen Version werden die Werte aus Spalten vom Typ
'text', 'ntext', 'image', 'timestamp', 'sql_variant' nicht exportiert. Stattdessen wird einfach der Wert NULL eingefügt.
Tabellen mit Identitätsspalte (IDENTITY)
Soll der INSERT in Tabellen mit einer Identitätssplate ausgeführt werden, so muss
das Einfügen von Identitätswerten für die Tabelle zunächst aktiviert werden.
Verwenden Sie dazu die Anweisung
SET IDENTITY_INSERT tabelle ON.
Nach dem Einfügen der Daten sollte die Option wieder abgeschaltet werden:
SET IDENTITY_INSERT tabelle OFF.
Fremdschlüsselbeziehungen
Beim Einfügen von Daten werden natürlich die Fremdschlüsselbeziehungen geprüft.
Achten Sie daher beim Ausführen der Scripts auf die richtige Reihenfolge oder Erstellen Sie zusätzlich
ein Script, dass die Einschränkungen zunächst deaktiviert und anschließend wieder aktiviert.
Denken Sie außerdem daran, dass eventuell vorhandene INSERT-Trigger ausgeführt werden.
svenh, september 2002
|