Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

MS SQL Server 2005 - Tabellen kopieren

Empfohlene Antworten

Veröffentlicht

Hallo, habe folgendes Problem: Hab den Auftrag bekommen, eine MS SQL Server 2005 Tabelle aus einer Datenbank zu kopieren. 1 zu 1. Inklusive Indexes, StoredProcedures, Statistics etc.

Das ganze soll in C# umgesetzt werden, was aber eher nebensächlich ist.

Das Endergebnis soll ein SQL Script sein, das, wenn man es z.B. im MS SQL Server 2005 Management Studio auf dem Server ausführt, mir die Tabelle, aus der ich das Script erzeugt habe, wiederherstellt, bzw. in einer anderen Datenbank einfügt.

Also es sollen alle Daten im SQL Script enthalten sein. Weiß jemand wie ich das umsetzen kann??? :eek

Hi

Probier mal folgendes Statement auf dem Server aus:

select * into <Neue Tabelle> from <zu kopierende Tabelle>;

Dieses Skript schreibt dir alles von der zu kopierenden Tabelle in die Neue Tabelle, die noch gar nicht existiert und dadurch angelegt wird.

Jedoch weiß ich leider nicht ob dann auch die Indizes mit kopiert werden. Hab ich noch nicht probiert.

Gruß

Wie gar nicht? Den Tabelleninhalt sollte der SQL Server 2005 zumindest kopieren, da bin ich mir sicher. Oder meinst du die Indizes funktionieren nicht?

Ich glaub es geht eher darum, ein Create Table Script incl. aller Constraints und Indices zu generieren und nicht darum die Daten von A nach B zu verschieben.

Sofern MSSQL kein Package a la DBMS_METADATA anbietet, muss man hierzu über die Metatabellen der Datenbank gehen und sich das ganze selbst zusammenbauen.

Dim

Dim hat Recht.

aber wo ich nun verwirrt bin. Tabelle oder komplette Datenbank? Denn eine Tabelle hat "keine" Stored Procedures. Sind abhängige Objekte gemeint?

Also kopieren eine Tabelle mit Indizes, Constraints etc. geht halt nur mit Script (Create-Script generieren lassen) und dann mit INSERT INTO befüllen.

und ein SELECT INTO erzeugt nur eine Kopie der Daten ohne Indizes etc.

Aber immer noch gut auch eine leere Kopie zu erzeugen ist:

SELECT * INTO <NEUTAB> FROM <ALTTAB> WHERE 0=1

tschöö

B

SELECT * INTO <NEUTAB> FROM <ALTTAB> WHERE 0=1

Rein interessehalber: Macht es einen Unterschied, ob ich das nehm oder schreib

CREATE TABLE <NewTab> AS (SELECT * FROM <OldTab> WHERE 0=1);

:confused:

Moin zusammen,

Seit SQL-Server 2000 wird eine API für Datenbank-Operationen angeboten. Seit SQL-Server 2005 ist gibt es das ganze auch mit .NET-Bibliotheken. Nennt sich SQL Server Management Objects (SMO). Kleine Beispiele gibt es dazu in der MSDN oder beim SQLTeam (letzteres enthält auch den Link zu einer Anwendung, die das Scripten schon in gänze können soll... hab ich aber nicht ausprobiert).

Damit solltest du soweit an alle Objekte via Code kommen. Grundsätzlich unterstützen sie glaube ich alle die Script()-Methoden mit denen du das SQL-Script des Objektes bekommst. Leider habe ich keine Ahnung ob die Methode den Export von Daten unterstützt. Ich glaube nicht. Dafür wäre die Idee beim Scripten einer Tabelle, sich ein INSERT-Script zu generieren mittels einer Select-Anweisung


SELECT 'INSERT INTO  [i]<Tabelle>[/i]  ([i]<Spalte1>[/i]) VALUES (' + quotename(Spalte1, '''') + ')' FROM Tabelle

Gruß,

Honky

Rein interessehalber: Macht es einen Unterschied, ob ich das nehm oder schreib

CREATE TABLE <NewTab> AS (SELECT * FROM <OldTab> WHERE 0=1);

:confused:

hmm unter Microsoft SQL Server wäre mir das nicht bekannt, ob das überhaupt geht.

greets

  • Autor

Erstmal Danke für all die vielen Antworten.

Also stimmt, habe mich unklar ausgedrückt. Muss eine Tabelle 1 zu eins kopieren mit Constraints, Indizes etc. Ziel ist es, ein Create Script zu erzeugen.

Soll das ganze wie gesagt in C# schreiben. Die Lösung mit den SMO (Server Management Objects) habe ich hinbekommen, funktioniert wunderbar, sogar mit Daten. Nur leider will mein Chef das so nicht haben. Er hätte gerne eine DLL die er im SQL Server einbetten kann und dann die von mir geschriebene Funktion CopyTable() aufruft.

Hab aber keine Ahnung, wie ich das Script erzeugen soll. Mein Problem fängt schon da an, dass ich nicht weiss, welche Informationen alle in einer Tabelle enthalten sind und wie ich diese mit SQL abfragen kann.

Mein Ansatz zur Lösung wäre SQL Anfragen stellen wie z.B. "select name from dbo.sysobjects where Type ='U'" um alle Tabellennamen herauszufinden. Und dann halt CREATE (den gewählten Tabellennamen). Das ganze halt so weiter... Spalten ermitteln und anlegen... aber das muss doch auch irgendwie einfacher gehen, oder??? :(

  • 2 Wochen später...

Wenn du SMO im Griff hast, kannst du den Code doch auch in eine Assembly (dll) packen und via CLR Integration in den Server installieren. .NET-Funktionen lassen sich dann so aus dem normalen T-SQL heraus nutzen, z.B. dann auch durch deine CreateScript-Funktion.

Introducing SQL Server 2005's CLR Integration (devsource)

Introduction to SQL Server CLR Integration (msdn)

Der andere Weg über Systemtabellen geht natürlich auch, ist aber IMHO höllenkompliziert und unangebrachter Mehraufwand gegenüber der anderen Lösung. (Andererseits kennst du dann das SQL Server Innenleben recht gut :D)

Gruß,

Honky

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.