Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

SQL Datenbank per Script aktualisieren

Frage Entwicklung Datenbanken

Mitglied: Toxic1982

Toxic1982 (Level 1) - Jetzt verbinden

16.02.2010 um 13:57 Uhr, 9063 Aufrufe, 11 Kommentare

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
Mitglied: Tommy70
16.02.2010 um 14:02 Uhr
Hallo,

schon mal mit einem SQL-Script probiert das du im Mangment Studio von der Datenbank oder der Tabelle erstellen kannst?
Bitte warten ..
Mitglied: Toxic1982
16.02.2010 um 14:15 Uhr
Hi Tommy70!

Ich habe es gerade versucht. Neue Tabellen werden mit diesem Script korrekt angelegt. Aber Felder werden nicht in vorhandene Tabellen eingefügt.
Am liebsten würde ich die Tabellen löschen und neu anlegen lassen... ist allerdings nicht möglich da in diesen Tabellen ja auch Daten stehen.

Leider bin ich kein SQL Profi. Hast du sonst noch eine Idee?

Edit:
Habe grad nochmal Versucht, was passiert, wenn ich selbst ein Script erstelle. Hier ist allerdings das Problem, wenn ein Feld schon existiert, bricht der Vorgang ab:

alter TABLE WXXXXX add TCPIP varchar(20) NULL
alter Table WXXXXXX add LOGZEIT datetime NULL

Meldung 2705, Ebene 16, Status 4, Zeile 2
Spaltennamen müssen in jeder Tabelle eindeutig sein. Der Spaltenname 'TCPIP' wurde in der 'WXXXXX'-Tabelle mehrmals angegeben.
Bitte warten ..
Mitglied: Tommy70
16.02.2010 um 14:39 Uhr
Wenn du die Tabelle bearbeitest kannst du kannst du dir über das Menü Tabellen-Designer ein Änderungsscript generieren lassen.
Bitte warten ..
Mitglied: Firepower
16.02.2010 um 15:20 Uhr
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.
Bitte warten ..
Mitglied: Toxic1982
16.02.2010 um 15:30 Uhr
Hi Firepower!

Ich muß Spalten und Tabellen in vorhandene Datenbanken einfügen.

Die Problematik ist ja die, das der SQL Server diese Fehlermeldung bringt und dann das Script beendet. Würde er sie bringen und das Script weiterführen,
währ das optimal. Würde ich für jede Datenbank mein Script anpassen müssen damit wirklich nur die Felder angelegt werden die nicht vorhanden sind,
ist die Arbeit die ich davon habe ungefähr die selbe. ;)

Gibt es da nicht einen Globalen Befehl wie SET IGNORE FAILURE ?
Bitte warten ..
Mitglied: Firepower
16.02.2010 um 17:46 Uhr
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) ?
Bitte warten ..
Mitglied: Toxic1982
16.02.2010 um 22:41 Uhr
Das Script führe ich doch im Query Analyzer für eine besteimmte SQL DB durch.

Am liebsten möchte ich ein Script, das durch alle Tabellen in dieser DB geht und die Entsprechenden Felder einfügt.
Falls es eines der Felder schon gibt, kommt halt eine Fehlermeldung.

z.b. in Tabelle1
sollen Feld 1,2,3,4,5,6,7,8,9,10 hinzugefügt werden. Feld 1-4 gibt es in jeder Datenbank sei sie auch noch so alt. Aber Feld 5-10 ist nur in den neuen.
In Tabelle2 sollen Feld6-8 Hinzugefügt werden allerdings würde ich im Script auch schreiben wollen, das Feld1-5 hinzugefügt werden falls es die in
einer Datenbank nicht geben sollte.

alter TABLE Tabelle1 add Feld1 varchar(20) NULL
alter TABLE Tabelle1 add Feld1 varchar(20) NULL
alter TABLE Tabelle1 add Feld1 varchar(20) NULL
alter TABLE Tabelle1 add Feld1 varchar(20) NULL
alter TABLE Tabelle1 add Feld1 varchar(20) NULL
alter TABLE Tabelle1 add Feld1 varchar(20) NULL
alter TABLE Tabelle1 add Feld1 varchar(20) NULL
alter TABLE Tabelle1 add Feld1 varchar(20) NULL
alter TABLE Tabelle1 add Feld1 varchar(20) NULL
alter TABLE Tabelle1 add Feld1 varchar(20) NULL

alter Table Tabelle2 add Feld1 datetime NULL
alter Table Tabelle2 add Feld2 datetime NULL
alter Table Tabelle2 add Feld3 datetime NULL
alter Table Tabelle2 add Feld4 datetime NULL
alter Table Tabelle2 add Feld5 datetime NULL
alter Table Tabelle2 add Feld6 datetime NULL
alter Table Tabelle2 add Feld7 datetime NULL
alter Table Tabelle2 add Feld8 datetime NULL

So sollten doch eigentlich nur die Tabellen die Spalten/Felder kommen, die ich angebe.

Nur, da es in Tabelle1 ja schon die Felder 1-4 gibt, bricht mir das Script schon mit der Fehlermeldung ab und erstellt die restlichen Felder nicht.

Vielleicht bin ich auch nur zu schusselig. ;)

So, dann wünsche ich noch einen schönen Abend. Firepower, danke für deine Beiträge.
Bitte warten ..
Mitglied: Firepower
17.02.2010 um 11:38 Uhr
Hi ich nochmal, noch ne Frage,

Womit arbeitest du, mit Oracle oder Microsoft ?!
Bitte warten ..
Mitglied: MadMax
17.02.2010 um 12:44 Uhr
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:
01.
alter TABLE Tabelle1 add Feld1 varchar(20) NULL 
02.
go 
03.
alter TABLE Tabelle1 add Feld2 varchar(20) NULL 
04.
go 
05.
...
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:
01.
if object_id ('Tabelle1', 'U') is not null and ColumnProperty (object_id ('Tabelle1'), 'Feld1', 'ColumnId') is null 
02.
	alter table Tabelle1 add add Feld1 varchar(20) NULL 
03.
if object_id ('Tabelle1', 'U') is not null and ColumnProperty (object_id ('Tabelle1'), 'Feld2', 'ColumnId') is null 
04.
	alter table Tabelle1 add add Feld2 varchar(20) NULL 
05.
...
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
Bitte warten ..
Mitglied: Toxic1982
18.02.2010 um 07:49 Uhr
Hi Firepower!

Sorry, MS SQL Server. Ganz vergessen zu erwähnen.


Hi Mad Max!

Danke, das werde ich nachher mal testen.
Bitte warten ..
Mitglied: Toxic1982
19.02.2010 um 23:06 Uhr
So, nochmal herzlichen Dank. Hat wunderbar geklappt. Das Script ist fertig und läuft. Mit ein paar Verbessungen ist es perfekt.

Also, danke und schönen Abend noch.
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Festplatten, SSD, Raid
Vergleich zweier SSD-Typen im Raid-10 für den Anwendungsfall SQL-Datenbank (8)

Frage von DerWoWusste zum Thema Festplatten, SSD, Raid ...

Windows Server
Eine bestimmte SQL-Datenbank wird nicht jeden Tag gesichert? (12)

Frage von AlbertMinrich zum Thema Windows Server ...

Windows Server
gelöst SQL Datenbank Umzug (4)

Frage von hornissenmann zum Thema Windows Server ...

Windows Server
Microsoft SQL-Datenbank Syncronisieren

Frage von Herbrich19 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...