SQL 方言
衍生自 結構化查詢語言 (SQL)的 SQL 方言會使用人類可讀取的表達式來定義查詢語句。 搭配下列 ADSI 搜尋介面使用 SQL 查詢語句:
- ActiveX Data Object (ADO) 介面,這是使用 OLE DB 的自動化介面。
- OLE DB,這是一組用於查詢資料庫的 C/C++ 介面。
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 之間建立異質聯結。