SQL 方言

衍生自 結構化查詢語言 (SQL)的 SQL 方言會使用人類可讀取的表達式來定義查詢語句。 搭配下列 ADSI 搜尋介面使用 SQL 查詢語句:

SQL 語句需要下列語法。

SELECT [ALL] * | select-list FROM 'ADsPath' [WHERE search-condition] [ORDER BY sort-list]

下表列出 SQL 查詢語句關鍵詞。

關鍵字 描述
SELECT 指定要針對每個物件擷取的屬性逗號分隔清單。 如果您指定 *,查詢只會擷取每個物件的 ADsPath。
FROM 指定搜尋基底的 ADsPath。 例如,Active Directory 網域中 Users 容器的 ADsPath 可能是 'LDAP://CN=Users,DC=Fabrikam,DC=COM'。 請注意,路徑會以一對單引號 (') 括住。
WHERE 指定查詢篩選條件的選擇性關鍵詞。
排序依據 如果伺服器支援LDAP排序控件,則為產生伺服器端排序的選擇性關鍵詞。 Active Directory 支援排序控件,但可能會影響伺服器效能,特別是當結果集很大時。 排序列表是要排序的屬性逗號分隔清單。 請注意,Active Directory 僅支援單一排序索引鍵。 您可以使用選擇性的 ASC 和 DESC 關鍵詞來指定遞增或遞減排序順序;預設值為遞增。 ORDER BY 關鍵詞會覆寫 ADO Command 物件的 “Sort on” 屬性所指定的任何排序索引鍵。

 

注意

在使用 MultiByte 字元集的情況下,如果 ADO 使用 SQL 方言執行搜尋,則無法使用反斜杠來逸出字元。 相反地,必須使用特殊字元中列出的逸出序列。 例如,對於使用語法 「samAccountName=(Test」的語句,它會使用反斜杠 “\” 來逸出開啟的括號 “(”,相反地,您會將反斜杠取代為特殊字元 “\28”,如下所示:“samAccountName=\28Test”。

 

下列查詢語句是 ADSI 中 SQL 方言的範例。

若要搜尋所有群組物件。

SELECT ADsPath, cn FROM 'LDAP://DC=Fabrikam,DC=COM' WHERE objectCategory='group'

若要搜尋姓氏開頭為字母 H 的所有使用者。

SELECT ADsPath, cn FROM 'LDAP://OU=Sales,DC=Fabrikam,DC=COM' WHERE objectCategory='person' AND objectClass='user' AND sn = 'H*' ORDER BY sn

SQL 查詢的正式文法定義於下列程式代碼範例中。 所有關鍵詞不區分大小寫。

statement ::= select-statement
select-statement ::= SELECT [ALL] select-list FROM table-identifier [WHERE search-condition] [ORDER BY sort-list]
select-list ::= * | select-sublist [, select-sublist]... 
select-sublist ::= column-identifier
column-identifier ::= user-defined-name 
table-identifier ::= string-literal
search-condition ::= boolean-term [OR search-condition]
sort-list ::= column-identifier [ASC | DESC] [,column-identifier [ASC | DESC]]... 
boolean-term ::= boolean-factor [AND boolean-term]
boolean-factor ::= [NOT] boolean-primary
boolean-primary ::= comparison-predicate | (search-condition)
comparison-predicate ::= column-identifier comparison-operator literal
comparison-operator ::= < | > | <= | >= | = | <>
user-defined-name ::= letter [letter | digit]...
literal ::= string-literal | numeric-literal | boolean-literal 
string-literal ::= '{character}...' (Any sequence of characters delimited by quotes)
numeric-literal ::= digits [fraction] [exponent]
digits ::= digit [digit]...
fraction ::= . digits 
exponent ::= E digits
boolean-literal ::= TRUE | FALSE | YES | NO | ON | OFF

Active Directory OLE DB 提供者不支援 SQL 內部聯結,但您可以使用 SQL 來聯結 SQL 和 Active Directory 數據。 如需詳細資訊,請參閱 在 SQL Server 與 Active Directory 之間建立異質聯結。

搜尋篩選語法

LDAP 方言

使用 IDirectorySearch 介面搜尋

使用 ActiveX 資料物件搜尋

使用 OLE DB 搜尋