Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: Toxic1982

Toxic1982 (Level 1) - Jetzt verbinden

16.02.2010 um 13:57 Uhr, 10377 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 ..
Ähnliche Inhalte
Datenbanken
Wiederherstellung SQL Datenbank
Frage von mastertulleDatenbanken1 Kommentar

Hallo liebe Community, ich habe folgende Frage: Ich habe eine Datenbank per TDE verschlüsslt. Unter Datenbankoptionen habe ich die ...

Batch & Shell

Lokales Powershell Script in eine MS SQL Datenbank einlesen

Frage von jeffreyBatch & Shell18 Kommentare

Habe eine schwierige Frage eine lokales Powershell Script was auch automatisch ausgeführt wurde, soll per Script in eine MSQl ...

Datenbanken

SQL Datenbank durchsuchen

gelöst Frage von andre1988Datenbanken4 Kommentare

Hallo zusammen, ich bin auf meiner Arbeit für die Citrix Umgebung zuständig. Ich musste ein Server aus der Citrix ...

Windows Server

SQL Datenbank Umzug

gelöst Frage von hornissenmannWindows Server4 Kommentare

Hallo Gemeinde, ich möchte einen SQL 2008 Server/MS Server 2008 umziehen/migrieren auf einen SQL 2012 Server/MS Server 2012 R2 ...

Neue Wissensbeiträge
Windows 7
Updategängelung auf Windows 10, die zweite
Information von Penny.Cilin vor 4 TagenWindows 72 Kommentare

Hallo, da Windows 7 im kommenden Jahr nicht mehr supportet wird, werden Nutzer von Window 7 home premium wieder ...

Internet
EU-Urheberrechtsreform: Zusammenfassung
Information von Frank vor 6 TagenInternet1 Kommentar

Auf golem.de gibt es eine Analyse von Friedhelm Greis, der das Thema EU-Urheberrechtsreform gut und strukturiert zusammenfasst. Zwar haben ...

Microsoft Office

Office365 Schwachstellen bei Sicherheit und Datenschutz

Information von Penny.Cilin vor 7 TagenMicrosoft Office9 Kommentare

Auf Heise+ gibt es einen Artikel bzgl. Office365 Schwachstellen. Das ist noch ein Grund mehr seine Daten nicht in ...

Sicherheit
Schwachstellen in VPN Clients
Tipp von transocean vor 9 TagenSicherheit2 Kommentare

Moin, es gibt Sicherheitslücken bei VPN Clients namhafter Hersteller, wie man hier lesen kann. Gruß Uwe

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Notebooks in Firmenwlan authentifizieren
gelöst Frage von EarthShakerLAN, WAN, Wireless17 Kommentare

Guten Tag, unsere Firma möchte gerne flächendeckend WLAN einführen und hat zu diesem Zweck einen Dienstleister beauftragt. Wir benötigen ...

Peripheriegeräte
PS2 Y-Kabel für Maus+Tastatur an PS2 Combo-Anschluss ASUS Prime X370-A
gelöst Frage von Windows10GegnerPeripheriegeräte13 Kommentare

Hallo, ich bin am Überlegen das o.g. Motherboard anzuschaffen. Da ich aber noch PS/2 für Maus+Tastatur benötige (bei optischen ...

Windows 10
Netzlaufwerk verschwindet (aber nur bestimmter Laufwerksbuchstabe)
gelöst Frage von survial555Windows 1010 Kommentare

Hallo, ich habe ein ganz seltsames Problem. Systemumgebung: Server 2012 R2 als DC und Windows 10 Pro als Clients ...

Netzwerkmanagement
Netzwerk vorübergehend weg
Frage von ahstaxNetzwerkmanagement10 Kommentare

Hallo, folgendes Szenario stellt sich dar: Im Netzwerk mit Win7-PCs wurden Switche ausgetauscht. Grundsätzlich funktioniert alles mindestens so gut ...