sql server 2005 SMO

splat

Erfahrenes Mitglied
Hallo,

ist es möglich über SMO ein bestimmtes UPDATE über sämtliche Spalten aller Tabellen einer Datenbank zu machen?
Ich habe zwar schon recherchiert, aber Abfragen über mehrere bzw alle Tabellen habe ich bisher noch nicht gefunden :-|

Gruß
 
Hallo,

mit einer Stored Procedure und dem Auslesen von Metadaten ist soetwas sicher möglich. Nur: Wie soll das Update denn genau aussehen? Heisst die Spalte immer gleich? Ist der Wert immer gleich, oder berechnet der sich jedesmal neu?
 
Die Spalten heißen überall unterschiedlich.
Das Update soll sich auf alle Spalten, aller Tabellen beziehen.
Es sollen lediglich Datensätze geprüft und evtl Zeichenketten ersetzt werden.

Das Update müsste eben dynamisch aussehen... da ich ja nicht weiß, wie die Spalten heißen :confused: Geht so etwas?
 
Hallo Markus,

schonmal danke für deine Hilfe!
Ich habe mir das alles mal angesehen aber ich hänge schon ziemlich am Anfang fest :/
Wie kann ich denn alle Tabellennamen ermitteln, so das diese dann einzeln durchgegangen werden können? Gleiches gilt für die Spalten :confused: Zu dynamischem sql kann ich für meine Zwecke leider nichts finden. mmmmh man hat mir nur gesagt das es über SMO möglich wäre. :rolleyes: Da ist es ja fast noch leichter ein Programm zu schreiben :(
 
Also die Tabellen bekomme ich nun so:

Code:
SELECT name AS tabelle FROM dbo.sysobjects WHERE xtype = 'U'

Aber wie kann ich nun für jede dieser Tabellen ein Update durchführen lassen?! Also eine Art Schleife :confused:
 
Hi,
also ich habe das jetzt nun so mit dieser Schleife gelöst:

Code:
DECLARE tab_cursor CURSOR FOR 
SELECT name AS tabelle FROM dbo.sysobjects WHERE xtype = 'U';

OPEN tab_cursor;
FETCH NEXT FROM tab_cursor;
WHILE @@FETCH_STATUS = 0
	BEGIN
		// Hier das update
		FETCH NEXT FROM tab_cursor
	END;
CLOSE tab_cursor;
DEALLOCATE tab_cursor;

Jetzt müsste ich nur noch wissen wie ich mein sql update auf alle spalten der jeweiligen Tabelle anwenden kann. Gibt es eine Möglichkeit um alle Spalten einer Tabelle zu bekommen? :confused:
 
Hallo nochmal,

da kommst du so ähnlich heran.

SQL:
select t.name,
       c.* 
  from sys.tables t inner join sys.columns c 
    on t.object_id = c.object_id 
   and t.type='U'

Du musst also die sys.tables mit der sys.columns über die object_id joinen. Dort findest du dann die entsprechenden Einträge zu deinen gefundenen Tabellen, baust dir daraus die dynamischen UPDATE-Statements und führst sie aus.


Markus
 
Zurück