SQL 方言

派生自结构化查询语言的 SQL 方言使用人工可读表达式来定义查询语句。 使用以下 ADSI 搜索接口的 SQL 查询语句:

SQL 语句需要以下语法。

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

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

关键词 描述
选择 指定要为每个对象检索的属性的逗号分隔列表。 如果指定 *,查询仅检索每个对象的 ADsPath。
指定搜索基础的 ADsPath。 例如,Active Directory 域中用户容器的 ADsPath 可能是“LDAP://CN=Users,DC=Fabrikam,DC=COM”。 请注意,路径括在一对单引号中(')。
哪里 指定查询筛选器的可选关键字。
ORDER BY 一个可选关键字,如果服务器支持 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 搜索