SQL Datenbank per Script aktualisieren
Guten Tag!
Ich suche nach einer einfachen Möglichkeit eine SQL Datenbank zu aktualisieren.
Hintergrund:
Wir nutzen ein Programm das wir ständig weiter entwickeln und somit auch ständig SQL Tabellen und Felder hinzufügen. Nun möchte ich aber, wenn es sich vermeiden
lässt, nicht bei jedem, der dieses Programm seit z.b. 10 Jahren nutzt händisch Felder und Tabellen nachpflegen sondern ein Script haben, das diese aktualisiert.
Eine Tabelle sieht z.b. so aus:
[DINTERN] [int] IDENTITY (1, 1) NOT NULL ,
[OLDDINTERN] [int] NULL ,
[1INTERN] [int] NOT NULL ,
[2] [int] NOT NULL ,
[3] [datetime] NULL ,
[4] [varchar] (50) COLLATE Latin1_General_CI_AS NULL ,
[5] [int] NULL ,
[6] [varchar] (50) COLLATE Latin1_General_CI_AS NULL ,
[7] [int] NULL ,
[8] [real] NULL ,
[9] [real] NULL ,
[10] [real] NULL ,
[11] [varchar] (50) COLLATE Latin1_General_CI_AS NULL ,
[12] [varchar] (5) COLLATE Latin1_General_CI_AS NOT NULL ,
[13] [varchar] (50) COLLATE Latin1_General_CI_AS NULL ,
[14] [int] NULL ,
[15] [varchar] (30) COLLATE Latin1_General_CI_AS NULL ,
[16] [smallint] NOT NULL
Wobei 1intern, 2 und 16 Primärschlüssel sind.
So, müßte ich durch ca. 120 Tabellen gehen und Felder Aktualisieren.
Ich hoffe, ihr könnt mir helfen diese oft müßige Arbeit zu umgehen.
Danke im Vorraus.
Gruß
Erik
Ich suche nach einer einfachen Möglichkeit eine SQL Datenbank zu aktualisieren.
Hintergrund:
Wir nutzen ein Programm das wir ständig weiter entwickeln und somit auch ständig SQL Tabellen und Felder hinzufügen. Nun möchte ich aber, wenn es sich vermeiden
lässt, nicht bei jedem, der dieses Programm seit z.b. 10 Jahren nutzt händisch Felder und Tabellen nachpflegen sondern ein Script haben, das diese aktualisiert.
Eine Tabelle sieht z.b. so aus:
[DINTERN] [int] IDENTITY (1, 1) NOT NULL ,
[OLDDINTERN] [int] NULL ,
[1INTERN] [int] NOT NULL ,
[2] [int] NOT NULL ,
[3] [datetime] NULL ,
[4] [varchar] (50) COLLATE Latin1_General_CI_AS NULL ,
[5] [int] NULL ,
[6] [varchar] (50) COLLATE Latin1_General_CI_AS NULL ,
[7] [int] NULL ,
[8] [real] NULL ,
[9] [real] NULL ,
[10] [real] NULL ,
[11] [varchar] (50) COLLATE Latin1_General_CI_AS NULL ,
[12] [varchar] (5) COLLATE Latin1_General_CI_AS NOT NULL ,
[13] [varchar] (50) COLLATE Latin1_General_CI_AS NULL ,
[14] [int] NULL ,
[15] [varchar] (30) COLLATE Latin1_General_CI_AS NULL ,
[16] [smallint] NOT NULL
Wobei 1intern, 2 und 16 Primärschlüssel sind.
So, müßte ich durch ca. 120 Tabellen gehen und Felder Aktualisieren.
Ich hoffe, ihr könnt mir helfen diese oft müßige Arbeit zu umgehen.
Danke im Vorraus.
Gruß
Erik
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 136078
Url: https://administrator.de/forum/sql-datenbank-per-script-aktualisieren-136078.html
Ausgedruckt am: 15.01.2025 um 09:01 Uhr
11 Kommentare
Neuester Kommentar
Hi,
musst du neue Spalten in die Tabelle einfügen, oder nur die vorhandenen Daten ändern ?!
Weil Daten ändern geht mit update.
Also
UPDATE tabellenname SET spalte = Wert; <- ändert alle Spaltenwerte in jedem Datensatz
Wenn nur bestimmte Daten geändert werden sollen mit WHERE Klausel.
UPDATE tabellenname SET spalte = Wert
WHERE spalte=Wert; <- ändert nur die Spaltenwerte welche mit der WHERE Klausel übereinstimmen.
Werte als VARCHAR müssen natürlich in Anführungsstriche, auch in der WHERE Klausel
Als Beispiel: Datenbank mit Angestellten und Personalnummer:
Nr. | Name | Vorname | Adresse | Gehalt
1 | Musterman | Klaus | Teststr. | 2000
2 | Tester | Willi |Musterstr. | 2500
UPDATE tabelle SET Gehalt=5000; <- Ändert für alle das Gehalt auf 5000
UPDATE tabelle SET Gehalt=5000
WHERE Nr.=1; <-- Ändert Gehalt nur für Mitarbeiter 1
Neue Spalten machst du, wie du oben schon geschrieben hast mit
ALTER TABLE tabelle ADD Spaltenname TYP;
Wenn diese Spalte aber schon existiert, bekommst du oben angegebene Fehlermeldung.
Wenn Fragen, dann meld dich.
musst du neue Spalten in die Tabelle einfügen, oder nur die vorhandenen Daten ändern ?!
Weil Daten ändern geht mit update.
Also
UPDATE tabellenname SET spalte = Wert; <- ändert alle Spaltenwerte in jedem Datensatz
Wenn nur bestimmte Daten geändert werden sollen mit WHERE Klausel.
UPDATE tabellenname SET spalte = Wert
WHERE spalte=Wert; <- ändert nur die Spaltenwerte welche mit der WHERE Klausel übereinstimmen.
Werte als VARCHAR müssen natürlich in Anführungsstriche, auch in der WHERE Klausel
Als Beispiel: Datenbank mit Angestellten und Personalnummer:
Nr. | Name | Vorname | Adresse | Gehalt
1 | Musterman | Klaus | Teststr. | 2000
2 | Tester | Willi |Musterstr. | 2500
UPDATE tabelle SET Gehalt=5000; <- Ändert für alle das Gehalt auf 5000
UPDATE tabelle SET Gehalt=5000
WHERE Nr.=1; <-- Ändert Gehalt nur für Mitarbeiter 1
Neue Spalten machst du, wie du oben schon geschrieben hast mit
ALTER TABLE tabelle ADD Spaltenname TYP;
Wenn diese Spalte aber schon existiert, bekommst du oben angegebene Fehlermeldung.
Wenn Fragen, dann meld dich.
Das Problem ist, wenn du das auf alle Tabellen ausführst, bekommen auch Tabellen, welche die Spalte nicht brauchen,
wie SYSTEM Tabellen, diese Spalte hinzugefügt.
Das sollte ja nicht sein.
Wenn diese Tabellen unter einem bestimmten Schema liegen, wäre das schon einfacher.
Sind die Tabellen alle unter einem bestimmten Benutzer (Schema) ?
wie SYSTEM Tabellen, diese Spalte hinzugefügt.
Das sollte ja nicht sein.
Wenn diese Tabellen unter einem bestimmten Schema liegen, wäre das schon einfacher.
Sind die Tabellen alle unter einem bestimmten Benutzer (Schema) ?
Hallo Erik,
da gibts zwei Möglichkeiten:
1. Du fügst an jede alter-table-Zeile ein "go" an, dann wird jeder Befehl als abgeschlossene Einheit gesehen und nach dem Fehler wird zum nächsten Befehl übergegangen:
2. Du prüfst, ob die Spalte schon vorhanden ist und legst sie nur an, wenn das nicht der Fall ist, dann treten erst gar keine Fehler auf:
Der erste Teil vom if prüft, ob die Tabelle vorhanden ist, der zweite Teil, daß das Feld noch nicht vorhanden ist.
Gruß, Mad Max
da gibts zwei Möglichkeiten:
1. Du fügst an jede alter-table-Zeile ein "go" an, dann wird jeder Befehl als abgeschlossene Einheit gesehen und nach dem Fehler wird zum nächsten Befehl übergegangen:
alter TABLE Tabelle1 add Feld1 varchar(20) NULL
go
alter TABLE Tabelle1 add Feld2 varchar(20) NULL
go
...
2. Du prüfst, ob die Spalte schon vorhanden ist und legst sie nur an, wenn das nicht der Fall ist, dann treten erst gar keine Fehler auf:
if object_id ('Tabelle1', 'U') is not null and ColumnProperty (object_id ('Tabelle1'), 'Feld1', 'ColumnId') is null
alter table Tabelle1 add add Feld1 varchar(20) NULL
if object_id ('Tabelle1', 'U') is not null and ColumnProperty (object_id ('Tabelle1'), 'Feld2', 'ColumnId') is null
alter table Tabelle1 add add Feld2 varchar(20) NULL
...
Gruß, Mad Max