SQL Server 7.0 - Löschen von Spalten
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
Content-ID: 75184
Url: https://administrator.de/forum/sql-server-7-0-loeschen-von-spalten-75184.html
Ausgedruckt am: 07.04.2025 um 22:04 Uhr
werden, die für die Replikation notwendig sind (ROWGID).
einer Datenbank löscht?
Update TabellenName1 Set ROWGID = Null
Go
Update TabellenName2 Set ROWGID = Null
Go
...
Und so entfernst du die spalten aus den tabellen
ALTER TABLE TabellenName1 DROP COLUMN ROWGID
GO
ALTER TABLE TabellenName2 DROP COLUMN ROWGID
GO
...
...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
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
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.
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