[MSSQL] Alle Tabellen mit einer bestimmten Spalte updaten

rrobbyy

Mitglied
Hallo zusammen,

unsere DB hat knapp 480 Tabellen. Da es eine mandantenfähige DB ist, gibt es in sehr vielen Tabellen, ca. 230, die Spalte Firma.

Aufgrund eines Installationsfehlers, müssen jedoch alle Firmen-Spalten eine andere Ziffer bekommen.

Ein Cursor macht meines Erachtens Sinn, nur leider habe ich bis jetzt damit noch nichts gemacht, und die Samples, die ich gefunden habe, sind leider nicht sehr einleuchtend.

hiermit ziehe ich alle Tabellen mit der Firmen-Spalte raus:
Code:
select sysobjects.name as Tabellenname --, syscolumns.name as Spaltenname 
from syscolumns 

inner join	sysobjects
on syscolumns.id = sysobjects.id 

where (sysobjects.xtype = 'U')
and syscolumns.name = 'FIRMA' order by sysobjects.name

nur wie binde ich das in ein Cursor ein, der alle Ergbniss-Tabellen updated?
 
Hi

Ich nehm mal an es geht um den Sql Server?!
SQL:
DECLARE @tablename nvarchar(50);
select sysobjects.name as Tabellenname
from syscolumns 
inner join  sysobjects
on syscolumns.id = sysobjects.id 
where (sysobjects.xtype = 'U')
and syscolumns.name = 'FIRMA'

OPEN table_cursor

FETCH NEXT FROM table_cursor 
INTO @tablename 

WHILE @@FETCH_STATUS = 0
BEGIN
-- deine Update-Logik
FETCH NEXT FROM table_cursor 
INTO @tablename 
END
CLOSE table_cursor;
DEALLOCATE table_cursor;

Wenn das nicht hilft: Fragen präzise stellen! ;)
 
Supi! Hat funktioniert. Man muss jedoch den cursor noch deklarieren;)

hier das funktionierte vollständige Script:

Code:
DECLARE @tablename varchar(50)
DECLARE table_cursor cursor for
SELECT sysobjects.name AS Tabellenname
FROM syscolumns 
INNER JOIN  sysobjects
ON syscolumns.id = sysobjects.id 
WHERE (sysobjects.xtype = 'U')
AND syscolumns.name = 'FIRMA'

OPEN table_cursor
 
FETCH NEXT FROM table_cursor 
INTO @tablename 
 
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC('UPDATE ' + @tablename + ' set FIRMA = 1')
FETCH NEXT FROM table_cursor 
INTO @tablename 
END
CLOSE table_cursor;
DEALLOCATE table_cursor;
 

Neue Beiträge

Zurück