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.


Anmelden zum Antworten