SQL-Abfrageanweisungsreferenz

Betrifft: System Center Configuration Manager 2007, System Center Configuration Manager 2007 R2, System Center Configuration Manager 2007 R3, System Center Configuration Manager 2007 SP1, System Center Configuration Manager 2007 SP2

Beim Erstellen von Configuration Manager 2007-Berichten können viele nützliche Microsoft SQL Server-Anweisungen verwendet werden. Sie sind in diesem Abschnitt kurz beschrieben. Um diesem Thema folgen zu können, sollten Sie ein grundlegendes Verständnis von SQL-Abfrageanweisungen haben und wissen, wie folgende Abfragen geschrieben werden:

SELECT Name, Comment, CollectionID

FROM v_Collection

WHERE Name LIKE 'All Windows%'

ORDER BY Name

Informationen zum Schreiben von Standardabfragen finden Sie unter den Abfragegrundlagen in der Microsoft SQL Server 2005-Onlinedokumentation.

Aggregatfunktionen

Aggregatfunktionen (z. B. SUM, AVG, COUNT, COUNT(*), MAX, und MIN) generieren Zusammenfassungswerte in Abfrageergebnissätzen. Bei einer Aggregatfunktion werden (mit Ausnahme von COUNT(*)) alle ausgewählten Werte in einer einzelnen Spalte verarbeitet, um einen einzigen Ergebniswert zu erhalten. Abfragefunktionen können auf alle Zeilen einer Ansicht, auf eine von einer WHERE-Klausel angegebenen Teilmenge einer Ansicht oder auf eine oder mehrere Zeilengruppen der Ansicht angewendet werden. Beim Anwenden einer Aggregatfunktion wird aus jedem Zeilensatz ein einzelner Wert generiert.

ImportantWichtig
NULL-Werte werden nicht in die Aggregatergebnisse einbezogen. Wenn Sie also 100 Datensätze haben und 8 davon weisen für die von Ihnen gezählte Eigenschaft den Spaltenwert NULL auf, werden nur 92 Ergebnisse zurückgegeben.

Ein Beispiel für die Aggregatfunktion COUNT(*) wird in der folgenden Abfrage (aus dem vordefinierten Bericht Clients für jeden Standort zählen) und dem dazugehörigen Beispielergebnissatz angezeigt.

SELECT v_Site.SiteCode, v_Site.SiteName, v_Site.ReportingSiteCode,

Count(SMS_Installed_Sites0) AS 'Count'

FROM v_Site, v_RA_System_SMSInstalledSites InsSite

WHERE v_Site.SiteCode = InsSite.SMS_Installed_Sites0

GROUP BY SiteCode, SiteName, ReportingSiteCode

ORDER BY SiteCode

 

SiteCode SiteName ReportingSiteCode Anzahl

ABC

Standort „ABC“

 

928

123

Standort „123“

ABC

1010

Datums- und Zeitfunktionen

Die Datums- und Zeitfunktionen werden von vielen integrierten Berichten verwendet. Zu den am häufigsten verwendeten Funktionen zählen GETDATE, DATEADD, DATEDIFF und DATEPART.

GETDATE ()

Die Funktion GETDATE generiert den aktuellen Zeitpunkt (Datum und Uhrzeit) im SQL Server-internen Format für datetime-Werte. GETDATE nimmt den Parameter NULL an ().

In den folgenden Beispielen erhalten Sie den aktuellen Systemzeitpunkt (Datum und Uhrzeit):

SELECT GETDATE()

 

(kein Spaltenname)

2005-05-29 10:10:03.001

DATEADD (datepart, number, date)

Die Funktion DATEADD gibt einen neuen datetime-Wert zurück, bei dem zum angegebenen Datum ein Intervall hinzugefügt wird.

Der Parameter datepart gibt an, an welchem Teil des Datums ein neuer Wert zurückgegeben wird (z. B. Jahr, Monat, Tag, Stunde, Minute usw.), number ist der zur Erhöhung von datepart verwendete Wert, und date ist das Startdatum.

Im folgenden Beispiel erhalten Sie ein Datum, das zwei Tage vor oder nach dem 29. Mai 2005 liegt.

SELECT DATEADD([day], 2, '2005-05-29 10:10:03.001')

 

(kein Spaltenname)

2005-05-31 10:10:03.001

DATEDIFF (datepart, startdate, enddate)

Die Funktion DATEDIFF gibt die Anzahl von Datums- und Zeitgrenzen zurück, die zwischen zwei angegebenen Daten überschritten wurden.

Der Parameter Datepart gibt an, an welchem Teil des Datums ein neuer Wert zurückgegeben werden soll (z. B. Jahr, Monat, Tag, Stunde, Minute usw.), startdate bezieht sich auf das Anfangsdatum, enddate auf das Enddatum.

Im folgenden Beispiel erhalten Sie die Anzahl der Minuten zwischen der ersten und zweiten Datumsangabe:

SELECT DATEDIFF (minute, '2005-05-29 10:10:03.001',

'2005-06-12 09:28:11.111')

 

(kein Spaltenname)

20118

DATEPART (datepart, date)

Die Funktion DATEPART gibt eine Ganzzahl zurück, die den angegebenen Parameter datepart des festgelegten Datums repräsentiert.

Der Parameter Datepart gibt an, an welchem Teil des Datums ein Wert zurückgegeben werden soll, und date ist das angegebene Datum.

Im folgenden Beispiel erhalten Sie den Monat im angegebenen Datum:

SELECT DATEPART (month, '2005-05-29 10:10:03.001')

 

(kein Spaltenname)

5

Kombinieren von Datums- und Zeitfunktionen

In der Regel wird eine Kombination von Datums- und Zeitfunktionen in Configuration Manager-Berichten verwendet.

Im folgenden Beispiel erhalten Sie den aktuellen Zeitpunkt mit Datum und Uhrzeit, (2005-05-29 10:10:03.001 in diesem Fall) abzüglich 100 Tagen:

SELECT DATEADD([day], - 100, GETDATE())

 

(kein Spaltenname)

2005-02-18 10:10:03.001

Beispielabfrage mit Datum- und Zeitfunktionen

In der folgenden Abfrage erhalten Sie die Gesamtzahl der Statusmeldungen in einem Zeitraum von einem Tag. In dieser Abfrage werden die Funktionen COUNT, GETDATE und DATEADD sowie der logische Operator BETWEEN und die Klauseln GROUP BY und ORDER BY verwendet.

SELECT SiteCode, MessageID, COUNT(MessageID) AS [count],

GETDATE() AS [End Date]

FROM vStatusMessages

WHERE ([Time] BETWEEN DATEADD([day], -1, GETDATE()) AND GETDATE())

AND (MessageID BETWEEN '0' AND '10000')

GROUP BY SiteCode, MessageID

ORDER BY SiteCode, MessageID

 

Standortcode Meldungs-ID Anzahl Enddatum

ABC

500

190

2005-05-29 10:10:03.001

ABC

501

130

2005-05-29 10:10:03.001

ABC

502

190

2005-05-29 10:10:03.001

ABC

1105

85

2005-05-29 10:10:03.001

ABC

1106

5

2005-05-29 10:10:03.001

VERKNÜPFUNGEN

Zur Erstellung wirkungsvoller Berichte im Configuration Manager müssen Sie ein Verständnis für das Verknüpfen von verschiedenen Ansichten haben, um die erhofften Daten zu erhalten. Es gibt drei Arten von Verknüpfungen: innere, äußere und kreuzweise. Darüber hinaus gibt es drei Arten von äußeren Verknüpfungen: linke, rechte und vollständige. Die Selbstverknüpfung verwendet eine beliebige der oberen Verknüpfungen, verknüpft jedoch Datensätze aus derselben Ansicht.

Innere Verknüpfungen

Bei einer inneren Verknüpfung werden Datensätze aus zwei Ansichten kombiniert und zum Ergebnis einer Abfrage nur dann hinzugefügt, wenn die Werte der verknüpften Felder den angegebenen Kriterien entsprechen. Wenn Sie mithilfe der inneren Verknüpfung Ressourcen-ID die Ansichten v_R_System und v_GS_WORKSTATION_STATUS miteinander verknüpfen, erhalten Sie eine Liste aller Systeme und das Datum der zuletzt vorgenommenen Hardwareüberprüfung.

SELECT v_R_System.Netbios_Name0 AS MachineName,

v_GS_WORKSTATION_STATUS.LastHWScan AS [Last HW Scan]

FROM v_R_System INNER JOIN v_GS_WORKSTATION_STATUS

ON v_R_System.ResourceID = v_GS_WORKSTATION_STATUS.ResourceID

 

Computername Letzte HW-Überprüfung

Client1

2005-05-29 10:10:03.001

Client3

2005-06-12 09:28:11.110

Äußere Verknüpfungen

Eine äußere Verknüpfung gibt alle Zeilen aus den verknüpften Ansichten zurück, unabhängig davon, ob eine Zeile davon eine Übereinstimmung aufweist. Die ON-Klausel ergänzt die Daten, anstatt sie zu filtern. Die drei Arten von äußeren Verknüpfungen (links, rechts und vollständig) geben die Hauptdatenquelle an. Äußere Verknüpfungen können besonders hilfreich sein, wenn Sie NULL-Werte in einer Ansicht haben.

Linke äußere Verknüpfung

Wenn Sie eine linke äußere Verknüpfung zum Kombinieren von zwei Ansichten verwenden, sind alle Zeilen der linken Ansicht in den Ergebnissen enthalten. In der folgenden Abfrage werden die Ansichten v_R_System und v_GS_WORKSTATION_STATUS mithilfe der linken äußeren Verknüpfung verknüpft. Die Ansicht v_R_System ist die erste in der Abfrage aufgeführte und somit die linke Ansicht. Im Ergebnis ist eine Liste aller Systeme und das Datum der letzten Hardwareüberprüfung enthalten. Im Gegensatz zur inneren Verknüpfung sind Systeme, die noch nicht auf Hardware überprüft worden sind, nach wie vor mit einem NULL-Wert (wie im Ergebnissatz angezeigt) aufgeführt.

SELECT v_R_System.Netbios_Name0 AS MachineName,

v_GS_WORKSTATION_STATUS.LastHWScan AS [Last HW Scan]

FROM v_R_System LEFT OUTER JOIN v_GS_WORKSTATION_STATUS

ON v_R_System.ResourceID = v_GS_WORKSTATION_STATUS.ResourceID

 

Computername Letzte HW-Überprüfung

Client1

2005-05-29 10:10:03.001

Client2

NULL

Client3

2005-06-12 09:28:11.110

Rechte äußere Verknüpfungen

Eine rechte äußere Verknüpfung ist im Grunde ebenso wie eine linke äußere Verknüpfung, außer dass alle Zeilen aus der rechten Ansicht in den Ergebnissen enthalten sind.

Vollständige äußere Verknüpfung

Bei einer vollständigen äußeren Verknüpfung werden alle Zeilen von beiden verknüpften Sichten abgerufen. Sie gibt alle verbundenen Zeilen zurück, bei denen eine Verknüpfungsbedingung wahr ist, sowie die nicht verbundenen Zeilen aus jeder Ansicht, die mit NULL-Zeilen aus der anderen Ansicht verkettet ist. Der Einsatz dieser Art von äußerer Verknüpfung ist nicht empfehlenswert.

Kreuzverknüpfung

Eine Kreuzverknüpfung gibt das Produkt zweier Ansichten und nicht deren Summe zurück. Die einzelnen Zeilen in der linken Ansicht sind auf die Zeilen der rechten Ansicht abgestimmt. Es handelt sich um einen ungefilterten Satz aller möglichen Zeilenkombinationen. Wenn Sie jedoch eine WHERE-Klausel hinzufügen, fungiert eine Kreuzverknüpfung wie eine innere Verknüpfung. Sie filtert dann anhand der alle möglichen Zeilenkombinationen bis zu der gewünschten.

Selbstverknüpfung

Eine Selbstverknüpfung verwendet eine beliebige der obigen Verknüpfungsarten, stellt allerdings eine mit sich selbst verknüpfte Ansicht dar. In Datenbankdiagrammen nennt man eine Selbstverknüpfung eine reflexive Beziehung.

Schlüsselwortausdruck NOT IN

Unterabfragen mit dem Schlüsselwortausdruck NOT IN eignen sich hervorragend zum Suchen von Informationen zu einem Datensatz, der bestimmten Kriterien nicht entspricht. Im folgenden Beispiel wird der NetBIOS-Name aller Computer zurückgegeben, die Notepad.exe NICHT installiert haben. Sie müssen zunächst eine Abfrage erstellen, die alle Computer ermitteln kann, die die ausgewählte Datei wie folgt installiert haben:

SELECT DISTINCT v_R_System.Netbios_Name0

FROM v_R_System INNER JOIN v_GS_SoftwareFile

ON (v_GS_SoftwareFile.ResourceID = v_R_System.ResourceId)

WHERE v_GS_SoftwareFile.FileName = 'Notepad.exe'

Nach der Bestätigung, dass die erste Abfrage alle Computer mit installierter Notepad.exe anzeigt, verwendet die folgende Unterabfrageanweisung den Schlüsselwortausdruck NOT IN zum Suchen aller Computernamen, die die Datei „Notepad.exe“ NICHT installiert haben:

SELECT DISTINCT Netbios_Name0

FROM v_R_System

WHERE Netbios_Name0 NOT IN

(SELECT DISTINCT v_R_System.Netbios_Name0

FROM v_R_System INNER JOIN v_GS_SoftwareFile

ON (v_GS_SoftwareFile.ResourceID = v_R_System.ResourceId)

WHERE v_GS_SoftwareFile.FileName = 'Notepad.exe')

ORDER by Netbios_Name0

Siehe auch

Weitere Informationen finden Sie unter Configuration Manager 2007 – Informationen und Support (möglicherweise in englischer Sprache).
Das Dokumentationsteam erreichen Sie per E-Mail unter: SMSdocs@microsoft.com
Anzeigen: