SQL 方言

SQL 方言源于结构化查询语言,使用人类可读的表达式来定义查询语句。 将 SQL 查询语句与以下 ADSI 搜索接口一起使用:

SQL 语句需要以下语法。

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

下表列出了 SQL 查询语句关键字。

关键字 说明
SELECT 指定要为每个对象检索的属性的逗号分隔列表。 如果指定 *,查询仅检索每个对象的 ADsPath。
FROM 指定搜索的基数的 ADsPath。 例如,Active Directory 域中用户容器的 ADsPath 可能是'LDAP://CN=Users,DC=Fabrikam,DC=COM'。 请注意,路径括在一对单引号中 (')。
WHERE 指定查询筛选器的可选关键字。
ORDER BY 如果服务器支持 LDAP 排序控制,则生成服务器端排序的可选关键字。 Active Directory 支持排序控制,但它会影响服务器性能,尤其是在结果集较大的情况下。 排序列表是以逗号分隔的要排序的属性列表。 请注意,Active Directory 仅支持单个排序键。 可以使用可选的 ASC 和 DESC 关键字指定升序或降序排序顺序;默认值为升序。 ORDER BY 关键字覆盖使用 ADO 命令对象的“sort on”属性指定的任何排序键。

 

注意

在使用多字节字符集的情况下,如果使用 SQL 方言的 ADO 执行搜索,则不能使用反斜杠来转义字符。 相反,必须使用特殊字符中列出的转义序列。 例如,对于使用语法"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 进行搜索