DasChamaeleon
Neuer Benutzer
- Beiträge
- 2
Hallo,
ich habe folgenden Code. Manch einer wird vielleicht schon erkennen,
auf welche Umgebung er ausgelegt ist.
Wenn ich den Code praktisch für jede Tabelle seperat ausführen lasse, funktioniert alles.
Es soll jedoch dynamischer gestaltet werden. Daher habe ich eine Tabelle und eine Schleife eingebaut, leider funktioniert es nicht, wie geplant. Wo liegt mein Fehler? Ich habe... ach, seht selbst!
/*Variablen deklarieren*/
DECLARE @FromDB sysname;
DECLARE @ToDB sysname;
DECLARE @Temp varchar(20);
DECLARE @i Integer;
DECLARE @j Integer;
/*ACHTUNG: Hier muss die Ursprungs- und die Zieldatenbank eingetragen werden*/
SET @FromDB = QUOTENAME('Ursprungs_DB');
SET @ToDB = QUOTENAME('Ziel_DB');
/*Als Arrayersatz erzeuge und beschreibe ich eine Tabelle*/
DROP TABLE NeedToCopy;
CREATE TABLE NeedToCopy (id int, name text);
INSERT INTO NeedToCopy VALUES (1, '[User Group Access Control]');
INSERT INTO NeedToCopy VALUES (2, '[User Group Permission Set]');
INSERT INTO NeedToCopy VALUES (3, '[User Group Member]');
INSERT INTO NeedToCopy VALUES (4, '[User Group]');
INSERT INTO NeedToCopy VALUES (5, '[User Property]');
INSERT INTO NeedToCopy VALUES (6, '[User Personalization]');
INSERT INTO NeedToCopy VALUES (7, '[User]');
INSERT INTO NeedToCopy VALUES (8, '[Access Control]');
INSERT INTO NeedToCopy VALUES (9, '[Permission]');
INSERT INTO NeedToCopy VALUES (10, '[Permission Set]');
INSERT INTO NeedToCopy VALUES (11, '[Profile]');
/*Spricht die beiden Datenbanken an*/
EXEC ('USE ' + @FromDB);
EXEC ('USE ' + @ToDB);
/*Übernimmt die Tabellen aus der alten in die Neue Datenbank*/
SET @i = 1;
EXEC ('SELECT ' + @j + '=COUNT(id) FROM NeedToCopy');
While @i < @j + 1
BEGIN
EXEC ('SELECT ' + @Temp + '=name FROM NeedToCopy WHERE id = ' + @i);
EXEC ('DROP TABLE ' + @ToDB + '.[dbo].' + @Temp);
EXEC ('SELECT * INTO ' + @ToDB + '.[dbo].' + @Temp + ' FROM ' + @FromDB + '.[dbo].' + @Temp);
SET @i = @i + 1;
END;
DROP TABLE NeedToCopy;
ich habe folgenden Code. Manch einer wird vielleicht schon erkennen,
auf welche Umgebung er ausgelegt ist.
Wenn ich den Code praktisch für jede Tabelle seperat ausführen lasse, funktioniert alles.
Es soll jedoch dynamischer gestaltet werden. Daher habe ich eine Tabelle und eine Schleife eingebaut, leider funktioniert es nicht, wie geplant. Wo liegt mein Fehler? Ich habe... ach, seht selbst!
/*Variablen deklarieren*/
DECLARE @FromDB sysname;
DECLARE @ToDB sysname;
DECLARE @Temp varchar(20);
DECLARE @i Integer;
DECLARE @j Integer;
/*ACHTUNG: Hier muss die Ursprungs- und die Zieldatenbank eingetragen werden*/
SET @FromDB = QUOTENAME('Ursprungs_DB');
SET @ToDB = QUOTENAME('Ziel_DB');
/*Als Arrayersatz erzeuge und beschreibe ich eine Tabelle*/
DROP TABLE NeedToCopy;
CREATE TABLE NeedToCopy (id int, name text);
INSERT INTO NeedToCopy VALUES (1, '[User Group Access Control]');
INSERT INTO NeedToCopy VALUES (2, '[User Group Permission Set]');
INSERT INTO NeedToCopy VALUES (3, '[User Group Member]');
INSERT INTO NeedToCopy VALUES (4, '[User Group]');
INSERT INTO NeedToCopy VALUES (5, '[User Property]');
INSERT INTO NeedToCopy VALUES (6, '[User Personalization]');
INSERT INTO NeedToCopy VALUES (7, '[User]');
INSERT INTO NeedToCopy VALUES (8, '[Access Control]');
INSERT INTO NeedToCopy VALUES (9, '[Permission]');
INSERT INTO NeedToCopy VALUES (10, '[Permission Set]');
INSERT INTO NeedToCopy VALUES (11, '[Profile]');
/*Spricht die beiden Datenbanken an*/
EXEC ('USE ' + @FromDB);
EXEC ('USE ' + @ToDB);
/*Übernimmt die Tabellen aus der alten in die Neue Datenbank*/
SET @i = 1;
EXEC ('SELECT ' + @j + '=COUNT(id) FROM NeedToCopy');
While @i < @j + 1
BEGIN
EXEC ('SELECT ' + @Temp + '=name FROM NeedToCopy WHERE id = ' + @i);
EXEC ('DROP TABLE ' + @ToDB + '.[dbo].' + @Temp);
EXEC ('SELECT * INTO ' + @ToDB + '.[dbo].' + @Temp + ' FROM ' + @FromDB + '.[dbo].' + @Temp);
SET @i = @i + 1;
END;
DROP TABLE NeedToCopy;