MS SQL Server. Insert Scripts
-
Hallo.
Um die Daten meiner Datenbank zu sichern und diese auf andere Rechner zu übertragen würde ich gerne aus den vorhandenen Daten InsertScripts generieren lassen.
Ich habe nun im Netz ein Storedprocedure gefunden um aus einer einzelnen Tabelle eine InsertScript zu genererieren. Dazu muss ich die Soredprocdure aber für jede Tabelle ausführen.
Kennt ihr mir hier eine Lösung um dies für alle Tabellen automatisch zu machen?
-
SET NOCOUNT ON CREATE TABLE #TableSpace ( Rows int, DataSpaceUsed int, IndexSpaceUsed int ) DECLARE @TableSpace table ( TableName varchar(255), Rows int, DataSpaceUsed int, IndexSpaceUsed int ) DECLARE @Rows int, @DataSpaceUsed int, @IndexSpaceUsed int DECLARE @TableName varchar(255) DECLARE Table_Cursor CURSOR FOR SELECT user_name(o.uid) + '.' + o.name AS table_name FROM dbo.sysobjects o, dbo.sysindexes i WHERE OBJECTPROPERTY(o.id, N'IsTable') = 1 AND i.id = o.id AND i.indid < 2 AND o.name NOT LIKE N'#%' AND xtype = 'U' ORDER BY 1 OPEN Table_Cursor --------------------------------- --Set Data FETCH NEXT FROM Table_Cursor INTO @TableName INSERT INTO #TableSpace (Rows, DataSpaceUsed, IndexSpaceUsed) EXEC sp_MStablespace @TableName SELECT @Rows = Rows, @DataSpaceUsed = DataSpaceUsed, @IndexSpaceUsed = IndexSpaceUsed FROM #TableSpace INSERT INTO @TableSpace (TableName, Rows, DataSpaceUsed, IndexSpaceUsed) VALUES (@TableName, @Rows, @DataSpaceUsed, @IndexSpaceUsed) DELETE FROM #TableSpace -------------------------------- WHILE @@FETCH_STATUS = 0 BEGIN --------------------------------- --Set Data FETCH NEXT FROM Table_Cursor INTO @TableName INSERT INTO #TableSpace (Rows, DataSpaceUsed, IndexSpaceUsed) EXEC sp_MStablespace @TableName SELECT @Rows = Rows, @DataSpaceUsed = DataSpaceUsed, @IndexSpaceUsed = IndexSpaceUsed FROM #TableSpace INSERT INTO @TableSpace (TableName, Rows, DataSpaceUsed, IndexSpaceUsed) VALUES (@TableName, @Rows, @DataSpaceUsed, @IndexSpaceUsed) DELETE FROM #TableSpace -------------------------------- END CLOSE Table_Cursor DEALLOCATE Table_Cursor DROP TABLE #TableSpace SELECT * FROM @TableSpace ORDER BY Rows DESC
Ein Code für Tabellen Größe. Lässt sich sicher anpassen.
Du solltest aber deine Vorgehensweise überdenken.
Es gibt hier bessere Ansätze.
-
Hallo Unix-Tom
Ok. Danke dafür. Das sollte mal für den Anfang sein, während sich das Projekt in der Entwicklungsphase befindet. Da wird das Datenbankmodel ab und zu geändert.
Es wird vom Entity Framework neu generiert. Dann kann ich vor dem neu generieren, die Daten raus ziehen. Die Datenbank neu generieren lassen. Die Insertscripts an den entsprechenden Stellen ebenfalls anpassen und neu einspielen.
Aber bin auch offen für bessere Vorschläge.
-
Hallo nochmal.
Was meinst du denn mit "Ein Code für Tabellen Größe."
-
Hat mir jemand einen besseren Vorschlag. Unix-Tom hat leider nicht mehr geantwortet.
-
Es ist ein Script um die Tabellengrößen eines DB auszulesen.
Dies kannst Du nun für deine Zwecke umschreiben.
Eine andere Methode ist es die DB zu sichern und auf anderem Rechner neu einzuspielen oder Replikation.
-
Hallo UnixTom
Danke nochmal für deine Antwort.
Replikation hört sich gut an.
Sprich ich sollte ein script haben, dass mir die Datenbank auf einem anderen Rechner komplett anlegt.Wie macht man so eine Replikation. Denke das ist die richtige Richtung.
-
Du braucht dafür kein Script. Replication ist im MSSQL bereits drin.
Ansonst gibt es Befehle (solltest Dich mal damit beschäftigen und nichts fertiges erwarten) welche Daten kopieren oder ähnliches.
Weiters gibt es auch och *.dtsx
-
Hallo.
Sorry ich habe mir das mit der Replication nochmals angescahut. Das ist nicht das was ich brauche.
Würde gerne nochmals zu meiner Frage zurückkommen die ich anfangs gestellt habe.
Und zwar zum erzeugen der Insertscripts.Ich habe immer noch verstanden was du mit den Tabellengrößen willst. Ich suche ein stored pocedure dass mir aus den Inhalten der DB ein InsertScript erzeugt.
Am besten so dass ich die gewünschten Tabellen angeben kann.
-
Ich habe dir keinen fertigen Code geliefert sondern einen den Du anpassen kannst.
Das Script liest alle Tabellen aus und gibt die Tabellen größen aus.
Wenn Du aber Inserts bauen willst dann nimm dem Part zum Auslesen aller Tabellen und schreibe den Part für die Inserts neu.