itrain-home Kinderpatenschaften mit Plan Deutschland  
home
 Aktuelle Seite:  knowhow sql tsql xp xp_dir.asp 
 



 

Erweiterte gespeicherte Prozeduren

Datei- und Verzeichnisfunktionen

Für das Auflisten von Laufwerken, Verzeichnissen und Dateien stellt der SQL Server eine Reihe (meist undokumentierter) erweiterter gespeicherter Prozeduren zur Verfügung.


Auflisten aller Festplatten-Laufwerke

Syntax:

EXEC master.dbo.xp_fixeddrives [laufwerkstyp]

Ergebnis:

2-spaltiges Resultset mit Laufwerksbuchstabe und Anzahl der freien MB auf dem Laufwerk

Parameter:

[laufwerkstyp]Der Laufwerkstyp.
Mögliche Werte:
0 = Festplatten
1=Verbundene Netzlaufwerke
2=Floppy/Zip-Laufwerke
Alle anderen Werte geben die Festplattenlaufwerke zurück.

Beispiel: Anzeigen aller Festplattenlaufwerke auf dem Server mit weniger als 500 MB freiem Speicherplatz

CREATE TABLE #laufwerke(lw char(1), MB_frei int)  
 INSERT INTO #laufwerke  
  EXEC master..xp_fixeddrives   
 SELECT * FROM #laufwerke WHERE MB_frei < 500  
 DROP TABLE #laufwerke  
 GO

Auflisten aller bereiten Laufwerke

Mit Hilfe der erweiterten gespeicherten Prozedur xp_availablemedia kann eine Liste aller verfügbaren Laufwerke ermittelt werden. Dabei können auch CD-ROM/DVD-Laufwerke ermittelt werden.

Syntax:

EXEC master.dbo.xp_availablemedia [laufwerkstyp]

Ergebnis:

4-spaltiges Resultset mit Laufwerksbuchstabe Anzahl der freien Bytes (High/Low) auf dem Laufwerk und Laufwerkstyp.

Parameter:

[laufwerkstyp]Der Laufwerkstyp.
Mögliche Werte:
nicht angegeben=alle Laufwerke
1=Floppy-Laufwerke und Festplatten
2=Festplatten
8=DVD/CD-ROM Laufwerke

Beispiel: Anzeigen aller bereiten CD-ROM/DVD-Laufwerke auf dem Server

EXEC master.dbo.xp_availablemedia 8  
 

Beispiel für Ergebnis:

/*-----------------------------
EXEC master.dbo.xp_availablemedia 8
-----------------------------*/
name           low free    high free   media type
-------------- ----------- ----------- ---------- 
F:\            0,00        0,00        8,00
G:\            0,00        0,00        8,00


Auflisten eines Verzeichnisbaums mit und ohne Dateien

Die erweiterte gespeicherte Prozedur xp_dirtree bietet eine einfache Möglichkeit den Inhalt von Unterverzeichnisssen auf dem SQL Server zu ermitteln.

Als Parameter können die Suchtiefe und die Art der Ergebnisrückgabe (nur Verzeichnisse oder Verzeichnisse und Dateien) festgelegt werden.

Syntax:

EXEC master.dbo.xp_dirtree verzeichnis, [suchtiefe], [suchart]

Ergebnis:

2- bzw. 3-spaltiges Resultset mit Ordner/Dateiname und Suchtiefe. Wurde das suchart-Flag auf einen Wert ungleich 0 gesetzt, so wird außerdem in einer dritten Spalte angegeben, ob es sich um ein Verzeichnis oder eine Datei handelt.

Parameter:

verzeichnisLokaler Pfad des zu durchsuchenden Verzeichnisses
suchtiefeInteger-Wert, der angibt wieviele Ebenen von Verzeichnissen durchsucht werden sollen.
verzeichnisFlag, das festlegt, ob lediglich Ordner oder auch Dateien aufgenommen werden sollen.
Mögliche Werte: 0 - Standardwert, es werden nur Verzeichnisse gesucht 1 - Es werden auch Dateien gesucht

Beispiel: Auflisten aller EXE-Dateien im Verzeichnis C:\WINNT

CREATE TABLE #dir(datei_dir varchar(255), tiefe int, ist_datei int)  
 INSERT INTO #dir  
  EXEC master..xp_dirtree 'C:\winnt', 1, 1  
 SELECT datei_dir As Exe_Datei FROM #dir   
  WHERE ist_datei = 1  
  AND   RIGHT(datei_dir, 3) = 'exe'  
  ORDER BY datei_dir  
 DROP TABLE #dir

Auflisten aller Unterverzeichnisse eines Verzeichnisses

Sollen nur die direkten Unterverzeichnisse eines Verzeichnisses schnell ermittelt werden, bietet sich die Prozedur xp_subdirs an. Diese Prozedur erwartet als Parameter das zu durchsuchende Verzeichnis.

Syntax:

EXEC master.dbo.xp_subdirs verzeichnis

Ergebnis:

Einspaltiges Resultset mit den Namen der gesuchten Unterverzeichnisse

Parameter:

verzeichnisLokaler Pfad des zu durchsuchenden Verzeichnisses

Beispiel: Auflisten aller Unterverzeichnisse von C:\WINNT

EXEC master..xp_subdirs 'c:\winnt'  
 

Ermitteln der Attribute, Größe, etc. einer Datei

Mit Hilfe der gespeicherten Prozedur xp_getfiledetails können Informationen wie Dateiattribute, Datum des letzten Zugriffs, Erstelldatum, etc. über eine Datei abgefragt werden.

Syntax:

EXEC master.dbo.xp_getfiledetails verzeichnis_oder_datei

Ergebnis:

Mehrspaltiges Resultset mit den Alternativen Namen der Datei, den Dateiattributen, dem Datum und Zeitpunkt der Dateierstellung, Datum und Zeitpunkt des letzten Zugriffs und Datum und Zeitpunkt der letzte Änderung sowie der Größe der Datei in Bytes.

Parameter:

verzeichnis_oder_dateiVollständiger Name einer lokalen Datei oder eines lokalen Verzeichnisses

Beispiel: Ermitteln der Dateiinformationen für die Datei Boot.ini (Attributwerte werden sprechend dargestellt)

IF OBJECT_ID('sp_getDateiInfo', 'P') IS NOT NULL  
  DROP PROC sp_getDateiInfo  
 GO  
 CREATE PROC sp_getDateiInfo  
  @dateiname varchar(255)  
 AS  
   
 SET NOCOUNT ON  
 SET CONCAT_NULL_YIELDS_NULL ON  
   
 -- Erstellen einer Hilfstabelle für das Ergebnis von xp_getfiledetails  
 CREATE TABLE #dateiinfo   
 (  
  altname varchar(255),   
  groesse int,   
  erstelldatum varchar(8),   
  erstellzeit int,   
  zuletztgeschriebendatum varchar(8),   
  zuletztgeschriebenzeit int,  
  zuletztZugriffDatum varchar(8),   
  zuletztZugriffZeit int,   
  Attribute int  
 )  
 -- Füllen der Hilfstabelle  
 INSERT INTO #dateiinfo   
  EXEC xp_getfiledetails @dateiname  
 -- Ergebnis aufbereiten (Datum und Zeit zusammenfassen)  
 SELECT  altname  AS [Alternativer Name],   
  groesse / 1024  AS GroesseKB,   
  DATEADD (second,   
          (erstellzeit / 10000 % 100) * 3600 + -- Stunden  
   (erstellzeit / 100 % 100) * 60 + -- Minuten  
   erstellzeit % 100,  -- Sekunden  
          CAST(erstelldatum  AS datetime)) AS Erstellt,  
  DATEADD (second,   
          (zuletztgeschriebenzeit / 10000 % 100) * 3600 + -- Stunden  
   (zuletztgeschriebenzeit / 100 % 100) * 60 + -- Minuten  
   zuletztgeschriebenzeit % 100,  -- Sekunden  
          CAST(zuletztgeschriebendatum  AS datetime)) AS [Geändert am],  
  DATEADD (second,   
          (zuletztZugriffZeit / 10000 % 100) * 3600 + -- Stunden  
   (zuletztZugriffZeit / 100 % 100) * 60 + -- Minuten  
   zuletztZugriffZeit % 100,  -- Sekunden  
          CAST(zuletztZugriffDatum  AS datetime)) AS [Letzter Zugriff],  
  Attribute,   
  SPACE(255) AS Attributbeschreibung  
  INTO #dateiinfo_aufbereitet  
  FROM #dateiinfo  
   
 -- Hilfstabelle für Dateiattribute erstellen und füllen  
 CREATE TABLE #dateiattribute (att int, beschreibung varchar(30))  
 INSERT INTO #dateiattribute VALUES (1, 'Schreibgeschützt')  
 INSERT INTO #dateiattribute VALUES (2, 'Versteckt')  
 INSERT INTO #dateiattribute VALUES (4, 'System')  
 INSERT INTO #dateiattribute VALUES (8, 'Volume')  
 INSERT INTO #dateiattribute VALUES (16, 'Verzeichnis')  
 INSERT INTO #dateiattribute VALUES (32, 'Archiv')  
 INSERT INTO #dateiattribute VALUES (64, 'Alias')  
   
 -- Aktualisieren der Spalte Attributbeschreibung mit sprechendem Text  
 DECLARE @attSprechend varchar(255)  
 SELECT @attsprechend = ISNULL(@attSprechend + ', ' + beschreibung, beschreibung) FROM #dateiinfo_aufbereitet da  
  INNER JOIN #dateiattribute a  
   ON (attribute & att) = att  
 UPDATE #dateiinfo_aufbereitet  
  SET Attributbeschreibung = @attsprechend  
 -- Ergebnis anzeigen  
 SELECT * FROM #dateiinfo_aufbereitet  
 GO  
   
 EXEC sp_getDateiInfo 'C:\boot.ini'

Prüfen, ob eine Datei oder ein Verzeichnis existiert

Die Prozedur xp_fileexist prüft, ob eine Datei auf dem Server existiert. Dabei kann das Ergebnis als OUTPUT-Variable oder als Resultset zurückgegeben werden.

Syntax:

EXEC master.dbo.xp_fileexist verzeichnis_oder_datei [, ergebnis OUTPUT]

Ergebnis:

Wird der Ausgabeparameter ergebnis angegeben, enthält dieser den Wert 1, falls die Datei existiert.
Wird nur der Dateiname angegeben, so wird ein 3-spaltiges Resultset mit den Spalten "Datei existiert", "Datei ist ein Verzeichnis" und "Übergeordnetes Verzeichnis existiert".

Parameter:

verzeichnis_oder_dateiVollständiger Name einer lokalen Datei oder eines lokalen Verzeichnisses
[ergebnis OUTPUT]Rückgabeparameter, der angibt, ob die Datei existiert. (0=nein, 1=ja)

Beispiel: Prüfen, ob die Datei C:\WINNT\NOTEPAD.EXE auf dem Server existiert

DECLARE @datei_vorhanden int  
 EXEC master..xp_fileexist 'c:\winnt\notepad.exe', @datei_vorhanden OUTPUT  
 IF @datei_vorhanden = 1  
  PRINT 'Datei existiert'  
 ELSE  
  PRINT 'Datei existiert nicht.'

Valid XHTML 1.0!

Leerraum

Dokument zum Drucken anzeigen
English Pages
Link-Tipp zum Thema "Certification": www.ftq.com/

Sehr umfangreiche Site mit Infos rund um die Zertifizierung.