|
Erweiterte gespeicherte Prozeduren
Zugriff auf die Registrierungsdatenbank (Registry)
Für den Zugriff auf die Registry finden Sie in der master-Datenbank eine
Reihe von erweiterten gespeicherten Prozeduren (Extended Stored Procedures) mit
denen Werte und Schlüssel in der Regsitry gelesen, geschrieben und gelöscht
werden können.
Diese Prozeduren sind nicht dokumentiert und bei der Verwendung ist
äußerste Vorsicht angebracht. Testen Sie alle Aufrufe in jedem Fall zunächst auf
einem Testsystem. Fehlerhafte Aufrufe können das System zerstören.
Auf dieser Seite finden Sie Informationen zur Lösung der folgenden Aufgaben:
Zu allen Themen finden auch jeweils ein kleines Beispiel. Das Transact-SQL Script "regReadVorwahlen" zeigt anhand eines etwas größeren Beispiels (Einlesen
der internationalen Ländervorwahlen aus der Registrierungsdatenbank) wie diese Prozeduren eingesetzt werden können.
Übrigens: Sie können für den Zugriff auf die Registry auch das WScript.Shell Objekt des Windows Scripting Host verwenden.
Beispielcode dazu finden Sie im Bereich Transact-SQL und COM.
Lesen eines Wertes aus der Registrierungsdatenbank
Mit Hilfe der gespeicherten Prozedur xp_regread kann ein Wert aus der Registry gelesen werden.
Syntax:
EXEC master.dbo.xp_regread hive, schlüssel, wert [, ergebnis OUTPUT]
Ergebnis:
Wurde der Ausgabeparameter angegeben, so enthält er nach dem Aufruf den gelesenen Wert. Wird kein Ausgabeparameter angegeben, so wird ein zweispaltiges Resultset zurückgegeben. Die erste Spalte enthält den Namen des Werts, die zweite Spalte den Inhalt.
Parameter:
hive | Einer der Registry-Hives (z.B. HKEY_LOCAL_MACHINE, HKEY_CLASSES_ROOT oder HKEY_CURRENT_USER) |
schlüssel | Der Name des gesuchten Schlüssels. Die einzelnen Ebenen werden durch Backslash getrennt. |
wert | Der Name des gesuchten Werts. |
ergebnis OUTPUT | Ergebnisfeld. Achten Sie darauf, dass die Variable den passenden Datentyp verwendet. |
Einige nützliche Beispiele
Auslesen des Standardwerts eines Schlüssels
DECLARE @dateityp varchar(255) EXECUTE master.dbo.xp_regread 'HKEY_CLASSES_ROOT', '.txt', NULL, -- (Standard) @dateityp OUTPUT PRINT @dateityp
Auslesen des Daten- und Logverzeichnisses
DECLARE @datapath varchar(255) DECLARE @logpath varchar(255) EXEC master..xp_regread 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\MSSQLServer\MSSQLServer', 'DefaultData', @datapath OUTPUT EXEC master..xp_regread 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\MSSQLServer\MSSQLServer', 'DefaultLog', @logpath OUTPUT PRINT @datapath PRINT @logpath
Ermitteln des Rechnernamens
DECLARE @theComputer varchar(50) EXEC master.dbo.xp_regread 'HKEY_Local_Machine', 'System\CurrentControlSet\Control\ComputerName\ActiveComputerName', 'ComputerName', @theComputer OUTPUT PRINT @theComputer -- Für den SQL Server 2000 kann hier besser die folgende Prozedur verwendet werden: DECLARE @theComputer varchar(50) EXEC xp_getnetname @theComputer OUTPUT PRINT @thecomputer
Auflisten aller Unterschlüssel
Die Prozedur xp_regenumkeys ermöglicht das Auflisten aller Unterschlüssel eines Registry-Schlüssels
Syntax:
EXEC master.dbo.xp_regenumkeys hive, schlüssel
Ergebnis:
Ein einspaltiges Resultset mit den Namen aller gefundenen Unterschlüssel.
Parameter:
hive | Einer der Registry-Hives (z.B. HKEY_LOCAL_MACHINE, HKEY_CLASSES_ROOT oder HKEY_CURRENT_USER) |
schlüssel | Der Name des gesuchten Schlüssels. Die einzelnen Ebenen werden durch Backslash getrennt. |
Beispiel: Auflisten aller Unterschlüssel von HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers
EXECUTE master.dbo.xp_regenumkeys 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\MSSQLServer\Providers'
Auflisten aller Werte eines Unterschlüssels
Verwenden Sie die Prozedur xp_regenumvalues um alle Werte eines Unterschlüssels zu lesen.
Syntax:
EXEC master.dbo.xp_regenumvalues hive, schlüssel
Ergebnis:
Ein (oder mehrere) zweispaltige Resultsets mit den Namen und Inhalten aller gefundenen Werte.
Parameter:
hive | Einer der Registry-Hives (z.B. HKEY_LOCAL_MACHINE, HKEY_CLASSES_ROOT oder HKEY_CURRENT_USER) |
schlüssel | Der Name des Unterschlüssels. Die einzelnen Ebenen werden durch Backslash getrennt. |
Beispiel: Auflisten aller Werte des Schlüssels von HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\Parameters
EXECUTE master.dbo.xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\Parameters'
Schreiben eines Wertes in die Registry
Die Prozedur xp_regwrite schreibt einen Wert in die Regstrierungsdatenbank.
Vorsicht! Diese Prozedur überschreibt den Wert ohne weitere Rückfrage! Testen Sie diese Prozedur nur auf Testsystemen und machen Sie ein Backup der Registrierungsdatenbank.
Syntax:
EXEC master.dbo.xp_regwrite hive, schlüssel, wert, datentyp, inhalt
Ergebnis:
Dieser Aufruf liefert kein Ergebnis zurück.
Parameter:
hive | Einer der Registry-Hives (z.B. HKEY_LOCAL_MACHINE, HKEY_CLASSES_ROOT oder HKEY_CURRENT_USER) |
schlüssel | Der Name des Unterschlüssels. Die einzelnen Ebenen werden durch Backslash getrennt. |
wert | Der Name des Werts, der geschrieben werden soll. |
datentyp | Der Datentyp des Werts. Zum Beispiel REG_SZ, REG_DWORD, REG_BINARY |
inhalt | Der Inhalt des Wertes, der geschrieben werden soll. |
Beispiel: Schreiben des Werts "A_Test" mit dem Inhalt 'Hallo von xp_regwrite' unter den Schlüssel HKEY_LOCAL_MACHINE_Software
EXECUTE master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE', -- hive 'Software', -- Unterschlüssel 'A_Test', -- Names des Werts 'REG_SZ', -- Datentyp 'Hallo von xp_regwrite' -- Wert
Löschen eines Wertes aus der Registry
Mit Hilfe der Prozedur xp_regdeletevalue kann ein einzelner Schlüssel aus der Registrierungsdatenbank gelöscht werden.
Vorsicht! Diese Prozedur löscht den Wert ohne weitere Rückfrage aus der Registrierungsdatenbank! Testen Sie diese Prozedur nur auf Testsystemen und machen Sie ein Backup der Registrierungsdatenbank.
Syntax:
EXEC master.dbo.xp_regdeletevalue hive, schlüssel, wert
Ergebnis:
Dieser Aufruf liefert kein Ergebnis zurück. Wird der Wert nicht gefunden, so erhalten Sie die Fehlermeldung:
Meldung 22001, Ebene 1, Status 22001
RegDeleteValue() gab Fehler 2, 'Das System kann die angegebene Datei nicht finden.' zurück
Parameter:
hive | Einer der Registry-Hives (z.B. HKEY_LOCAL_MACHINE, HKEY_CLASSES_ROOT oder HKEY_CURRENT_USER) |
schlüssel | Der Name des Unterschlüssels. Die einzelnen Ebenen werden durch Backslash getrennt. |
wert | Der Name des Werts, der gelöscht werden soll. |
Beispiel: Löschen des Werts "A_Test" unter den Schlüssel HKEY_LOCAL_MACHINE_Software
EXEC master.dbo.xp_regdeletevalue 'HKEY_LOCAL_MACHINE', -- hive 'Software', -- Unterschlüssel 'A_Test' -- Name des Werts
Löschen eines Schlüssels aus der Registry
Um einen ganzen Unterschlüssel aus der Registrierungsdatenbank zu löschen, können Sie die Prozedur
xp_regdeletekey verwenden.
Vorsicht! Diese Prozedur löscht den gesamten Schlüssel ohne weitere Rückfrage aus der Registrierungsdatenbank! Testen Sie diese Prozedur nur auf Testsystemen und machen Sie ein Backup der Registrierungsdatenbank.
Syntax:
EXEC master.dbo.xp_regdeletekey hive, schlüssel
Ergebnis:
Dieser Aufruf liefert kein Ergebnis zurück.
Parameter:
hive | Einer der Registry-Hives (z.B. HKEY_LOCAL_MACHINE, HKEY_CLASSES_ROOT oder HKEY_CURRENT_USER) |
schlüssel | Der Name des Unterschlüssels der gelöscht werden soll. Die einzelnen Ebenen werden durch Backslash getrennt. |
Beispiel: Löschen des Unterschlüssels "1Schluessel" unter dem Schlüssel HKEY_LOCAL_MACHINE_Software
EXEC master.dbo.xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'Software\1Schluessel'
|