cement

SQL Server 7.0 - Löschen von Spalten

Moin Leute,

wir haben hier ein Programm im Einsatz, welches noch auf MS SQL-Server 7.0 läuft.

Da wir zwei Standorte haben, werden die entsprechenden Datenbanken regelmäßig per SQL repliziert.

Nun lassen sich aus dem Programm einige Funktionen nicht mehr starten.
Deswegen will ich die Datenbanken aus einem Backup wiederherstellen.
Dazu müssen allerdings aus den einzelnen Tabellen die Spalten gelöscht werden, die für die Replikation notwendig sind (ROWGID).

Die Anwendung verwendet insgesamt fünf SQL-Datenbanken, jede mit ca. 150 einzelnen Tabellen.
Und in jeder dieser Tabelle muss die Spalte "ROWGID" gelöscht werden.

Zum Löschen will ich den Enterprise Manager verwenden.

Nun meine Frage:

Kann man eine Spalte per Skript löschen?
Kann man evtl. sogar ein Skript schreiben, was diese Spalte aus allen Tabellen innerhalb einer Datenbank löscht?

Falls ja, wäre es super, wenn mir jemand das Skript hier aufschreiben könnte, wie es dann auch im Enterprise Manager eingegeben werden muss.

Danke für alle Tipps,

Gruß CeMeNt
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 75184

Url: https://administrator.de/forum/sql-server-7-0-loeschen-von-spalten-75184.html

Ausgedruckt am: 06.07.2025 um 12:07 Uhr

Logan000
Logan000 04.12.2007 um 17:38:40 Uhr
Dazu müssen allerdings aus den einzelnen Tabellen die Spalten gelöscht
werden, die für die Replikation notwendig sind (ROWGID).
Möchtest Du Die Spalte aus der Tabelle entfernen oder den Inhalt diser Spalte löschen?

Zum Löschen will ich den Enterprise Manager verwenden.
Besser Query Analyser

Kann man eine Spalte per Skript löschen?
Ja.
Kann man evtl. sogar ein Skript schreiben, was diese Spalte aus allen Tabellen innerhalb
einer Datenbank löscht?
Ja.

Update TabellenName1 Set ROWGID = Null
Go
Update TabellenName2 Set ROWGID = Null
Go
...
und so weiter löscht die Inhalte von Rowgid.

Und so entfernst du die spalten aus den tabellen
ALTER TABLE TabellenName1  DROP COLUMN ROWGID 
GO
ALTER TABLE TabellenName2  DROP COLUMN ROWGID 
GO
...
Biber
Biber 04.12.2007 um 18:50:51 Uhr
Moin CeMeNt,

...und das Script zum Spalten-DROPpen lässt Du Dir am Besten schreiben:

SELECT     'ALTER TABLE ' || o.name || ' DROP COLUMN ROWGID; ' AS MyScript   
FROM        
 sysobjects AS o 
INNER JOIN
 syscolumns AS c 
  ON   c.id = o.id 
WHERE  ( o.type = 'U' and c.name = 'ROWGID'   );  

Das liefert für alle (User-)Tabellen, also sysobjects.type="U" jeweils eine Zeile in der von Logan000 geschriebenen Form. Natürlich nur, wenn die Tabelle eine Spalte mit dem Namen "ROWGID" enthält.

Ich würde aber zumindest nochmal prüfen, ob/welche anderen sysobjects-Zeilen auch eine Spalte "ROWGID" enthalten.

Grüße
Biber
CeMeNt
CeMeNt 05.12.2007 um 08:11:39 Uhr
Moin Leute,

erst mal vielen Dank für Eure Hinweise.

@Logan000:
Ja, die Spalten sollen komplett gelöscht werden.
Das Programm sieht normalerweise nicht vor, dass es per SQL repliziert wird.
Im Original gibt es also die Spalte "ROWGID" nicht.
Diese wird dann später wieder erzeugt, wenn wir die Replikation erneut einrichten.

Bei der Methode
ALTER TABLE TabellenName1 DROP COLUMN ROWGID...
muss ich ja aber jeden einzelnen Tabellennamen kennen und entsprechend eingeben.

Besser Query Analyser

Might as well... Bin halt nicht sooo fit in SQL. Deswegen wäre ich über den Enterprise Manager gegangen, und wäre dann über die Abfrage gegangen. Da hätte ich dann die entsprechende Syntax eingegeben...
Könnte es sein, dass das aufs Selbe hinausführt...?

@Biber und Logan000:
OK, ich habe nun also den SQL Query Analyzer gestartet.

Meine Datenbank heißt z.B. StammDaten
Darin gibt es 138 Tabellen.
Diese heißen z.B.: Allgemein, Profile, Zubehoer usw...

Im Query Analyzer sind die Tabellen sichtbar als : dbo.A_Allgemein ; dbo.A_Profile usw...

Könnt Ihr mir vielleicht noch einmal die exakte Syntax aufschreiben, die ich im Analyzer eingeben muss, um die Spalte "ROWGID" aus den Tabellen komplett zu entfernen?

(Am liebsten so, dass ich nicht alle 138 Tabellen-Namen einzeln eingeben muss? Wenn dass denn geht...?)

Danke noch mal,

Gruß CeMeNt
Biber
Biber 05.12.2007 um 08:48:37 Uhr
Moin CeMeNt,

magst Du noch einmal meinen Kommentar von gestern lesen bitte?

Nicht alles, sondern nur die Zeilen zwischen "Moin CeMeNt," und "Grüße"...

Grüße
Biber
Logan000
Logan000 05.12.2007 um 08:57:11 Uhr
Könnt Ihr mir vielleicht noch einmal die exakte Syntax aufschreiben, die ich im
Analyzer eingeben muss, um die Spalte "ROWGID" aus den Tabellen komplett
zu entfernen?
(Am liebsten so, dass ich nicht alle 138 Tabellen-Namen einzeln eingeben muss? Wenn
dass denn geht...?)

Das Skript von Biber liefert als Ergebis ein Skript zum löschen der Spalte Rowid in allen denen Tabellen.
Führe es im QA aus und kopiere das Ergebis in ein neues Abfragefenster. Ausführen. fertig.

@Biber
SELECT     'ALTER TABLE ' || o.name || ' DROP COLUMN ROWGID; ' AS MyScript   
nicht ein + stehen?
Biber
Biber 05.12.2007 um 09:14:11 Uhr
Moin Logan000,


Hm, ich hab natürlich keinen M$-SQLServer hier stehen zum Testen.
So alt und bieder fühl ich mich ja doch noch nicht, dass ich etwas sooo Altbackenes nehme. face-wink
Ich dachte, mit dem Standard-SQL-Concat-Operator wäre ich auf der sicheren Seite.

Aber wenn sich der Query-Analyzer da mehr an Access/VB-Syntax anlehnt, dann meinetwegen zum Verketten von Strings auch " + " oder " & ".

Grüße
Biber