Laden...

MSSQL DB Kopieren

Erstellt von dimo11 vor 12 Jahren Letzter Beitrag vor 12 Jahren 3.129 Views
D
dimo11 Themenstarter:in
29 Beiträge seit 2011
vor 12 Jahren
MSSQL DB Kopieren

verwendetes Datenbanksystem: <MSSQL 2008 Std.>

Hallo ich möchte mit meinem SQL MAnagement Sudio eine Datenbak kopieren.

Problem : Ich möchte nur die Struktur und das Datenbankdiagramm kopieren und nicht die Inhalte.

Ist die überhaupt möglich ?

Grüße

1.815 Beiträge seit 2005
vor 12 Jahren

Hallo!

Dann geh doch einfach die Schritte im Assistenten durch. Selbst wenn du irgendwann versehentlich den Kopiervorgang startest, kann man den soweit ich weis abbrechen.

Nobody is perfect. I'm sad, i'm not nobody 🙁

D
dimo11 Themenstarter:in
29 Beiträge seit 2011
vor 12 Jahren

Das Kopieren ist nicht das Problem das geht natürlich !

Aber ich möchte wie oben geschrieben nur die Datenbankstruntur kopieren und nicht die Inhalte.

M
118 Beiträge seit 2008
vor 12 Jahren

Hallo,

Rechtsklick auf die gewünschte Datenbank --> Tasks --> Skript generien

über diesen Dialog kannst du dir ein (oder mehrere) SQL-Skript erzeugen, das dein DB-Schema enthält

1.815 Beiträge seit 2005
vor 12 Jahren

Hallo!

Eigentlich hatte ich damit auch gemeint, dass der Assistent evtl. an einer Stelle die Möglichkeit bietet, nur die Struktur zu kopieren. Ist aber anscheinend nicht der Fall.

Nobody is perfect. I'm sad, i'm not nobody 🙁

D
dimo11 Themenstarter:in
29 Beiträge seit 2011
vor 12 Jahren

Leider nicht.

Ich kann ja mein Problem genauer erläutern :

Ich habe eine Datenbank mit ca 100 Tabellen die alle mit Foreign Keys miteinander verbunden sind. Diese möchte ich truncaten (Inhalte leeren und Ids zurücksetzen). Da dies aber nicht geht durch die foreign key Einschränkungen, dachte ich mir ich kann nur die struktur kopieren und habe somit eine leere Datenbank bei denen die Ids bei 1 anfangen.

3.511 Beiträge seit 2005
vor 12 Jahren

Hallo,

warum dann so umständlich? Einfach alle Foreign Keys deaktivieren, dann Truncaten, dann Foreign Keys wieder aktivieren.


-- Foreign Keys auf allen Tabellen deaktivieren
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT ALL"

-- Foreign Keys auf allen Tabellen aktivieren
EXEC sp_msforeachtable "ALTER TABLE ? CHECK CONSTRAINT ALL"

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

D
dimo11 Themenstarter:in
29 Beiträge seit 2011
vor 12 Jahren

Hallo, vielen Dank für deine Hilfe, das bringt mich auf jeden fall schon mal weiter.

Leider funktioniert das truncaten immer noch nicht :

Erfolgreich Ausgeführt :



exec sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'  
exec sp_MSforeachtable 'ALTER TABLE ? DISABLE TRIGGER ALL'
exec sp_MSforeachtable 'DELETE ?'

Datenbak jetzt leer aber IDs fangen leider nicht bei 0 an
bei


exec sp_MSforeachtable 'TRUNCATE TABLE ?'

error : Ausgeführte SQL-Anweisung: EXEC sp_MSforeachtable 'TRUNCATE TABLE ?' Fehlerquelle: .Net SqlClient Data Provider Fehlermeldung: Die dbo.module_types-Tabelle kann nicht abgeschnitten werden, da eine FOREIGN KEY-Einschränkung auf sie verweist.

Danke für die Hilfe!!

3.511 Beiträge seit 2005
vor 12 Jahren

Um IDs auf Ihren Urspringswert zu setzen reicht es auch aus ein DBCC RESEED anzuwenden.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

D
dimo11 Themenstarter:in
29 Beiträge seit 2011
vor 12 Jahren

Vielen Dank für die Hilfe so hats funktioniert!

D
dimo11 Themenstarter:in
29 Beiträge seit 2011
vor 12 Jahren

Hallo eine Frage noch bei der du mir sicher weiterhelfen kannst.

Es hat alles einwandfrei funktioniert bis auf das

exec sp_MSforeachtable 'DELETE ?'

mit auch das Datenbankdiagramm löscht.

Kann ich das umgehen ?

Vielen Dank

3.511 Beiträge seit 2005
vor 12 Jahren

Hallo,

du musst dann abfragen, ob der Objekttyp auch eine Tabelle ist. Das geht recht einfach, wenn du


EXEC sp_MSforeachtable 'IF EXISTS(SELECT * FROM sys.objects WHERE type = ''U'' AND object_id = OBJECT_ID(''?'')) DELETE ''?'''

schreibst

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

D
dimo11 Themenstarter:in
29 Beiträge seit 2011
vor 12 Jahren

Super Vielen Dank das wars.

Merci noch mal für deine Hilfe .


exec sp_MSforeachtable "IF EXISTS(SELECT    *
FROM         sys.objects
WHERE     (type LIKE 'U') AND (object_id = OBJECT_ID('?'))) DELETE ?"