![]() ![]() ![]() ![]() |
||||||||||||||||
Kopieren der kompletten SQL Datenbank
VorgehensweiseVorgehensweise zum umkopieren der Kplus Datenbank:
Script - Kopieren der SQL DatenbankScript: -- -------------------------------------------------------------------------------------- -- Umkopieren von userbezogenen Tabellen von einer Datenbank auf eine andere Datenbank -- -- Programmierer: Widmann Andreas (Juli/2010) -- -- Erforderliche Skriptanpassungen: -- -- Es müssen nur die Variablen geändert werden (siehe Beschreibung -- -------------------------------------------------------------------------------------- -- Umschalten auf die Zieldatenbank use kplus_M0 GO -- damit nicht alles ausgegeben wird SET NOCOUNT ON; -- Deklaration der benötigten Variablen DECLARE @l_tbname varchar(200) ,@l_colname varchar(200) ,@l_lasttbname varchar(200) ,@l_cols varchar(4000) ,@l_SQL varchar(8000) ,@l_Source_Owner varchar(100) ,@l_Target_Owner varchar(100) ,@l_Source_DB varchar(100) ,@l_Target_DB varchar(100) ; -- Setzen (diese 4 Variablen müssen geändert werden!!!) SET @l_Source_DB = 'kplus_old'; -- alter Datenbankname SET @l_Target_DB = 'kplus_new'; -- neuer Datenbankname SET @l_Source_Owner = 'db_owner'; -- Schemaname in alter Datenbank SET @l_Target_Owner = 'dbo'; -- Schemaname in neuer Datenbank (sollte so bleiben!) -- -------------------------------------------------------------------------------------- -- ab hier bitte nichts mehr ändern (nur nach vorheriger Rücksprache mit Koram) -- -------------------------------------------------------------------------------------- -- Erzeugen temporäre Tabelle -- sicherheitshalber prüfen, ob es diese Tabelle noch gibt if OBJECT_ID(N'tempdb..#tmpCols') IS NOT NULL drop table #tmpCols; -- immer Collate angeben, da man nicht weiß mit welcher Collate die tempdb angelegt wurde create table #tmpCols (tbname varchar(200) collate Latin1_General_CI_AS, tbcolumns varchar(4000) collate Latin1_General_CI_AS); -- Selektieren aller Userbezogenen Tabellen mit den dazugehörigen Spalten DECLARE hCur CURSOR FAST_FORWARD FOR SELECT sys.objects.name,sys.columns.name from sys.columns inner join sys.objects on sys.objects.object_id=sys.columns.object_id where sys.objects.type='u' order by 1; -- Cursor öffnen OPEN hCur; -- Lesen FETCH NEXT FROM hCur INTO @l_tbname,@l_colname; SET @l_lasttbname = @l_tbname; SET @l_cols = ''; -- Schleife über alle Sätze bis EOF While @@FETCH_STATUS = 0 BEGIN -- Gruppenwechsel feststellen IF @l_lasttbname <> @l_tbname BEGIN -- Einfügen in die temp. Tabelle INSERT INTO #tmpCols VALUES(@l_lasttbname,@l_cols); SET @l_lasttbname = @l_tbname; SET @l_cols = ''; END -- Spalten zusammenbauen IF @l_cols <> '' SET @l_cols = @l_cols + ','; SET @l_cols = @l_cols + @l_colname; -- weiterlesen FETCH NEXT FROM hCur INTO @l_tbname,@l_colname; END -- Letzte Tabelle gehört auch noch in die temp. Tabelle INSERT INTO #tmpCols VALUES(@l_lasttbname,@l_cols); -- Cursor schliessen CLOSE hCur; DEALLOCATE hCur; -- Selektieren der gerade aufgebauten temp. Tabelle DECLARE hCur CURSOR FAST_FORWARD FOR SELECT tbname,tbcolumns from #tmpCols order by tbname; OPEN hCur; -- Lesen FETCH NEXT FROM hCur INTO @l_tbname,@l_cols; -- Schleife über alle Sätze bis EOF While @@FETCH_STATUS = 0 BEGIN -- Löschen Zieltabelle SET @l_SQL = 'DELETE FROM ' + @l_Target_DB + '.' + @l_Target_Owner + '.' + @l_tbname; EXEC (@l_SQL); -- Setzen Identity-Insert SET @l_SQL = 'SET IDENTITY_INSERT ' + @l_tbname + ' ON' + CHAR(13) + CHAR(10);
-- Datensätze kopieren mittels INSERT + SELECT SET @l_SQL = @l_SQL + 'INSERT INTO ' + @l_Target_DB + '.' + @l_Target_Owner + '.' + @l_tbname + '(' + @l_cols + ') '; SET @l_SQL = @l_SQL + 'SELECT ' + @l_cols + ' FROM ' + @l_Source_DB + '.' + @l_Source_Owner + '.' + @l_tbname; -- Ausgabe des SQL-Befehles, damit man bei einem Fehler weiß, wo dieser passiert ist. PRINT @l_SQL; EXEC (@l_SQL);
-- weiterlesen FETCH NEXT FROM hCur INTO @l_tbname,@l_cols; END CLOSE hCur; DEALLOCATE hCur; GO SQL Scripts |
||||||||||||||||
Zum Seitenanfang |
![]() ![]() |
|||||||||||||||
|