SQL 方言
SQL 方言源于结构化查询语言,使用人类可读的表达式来定义查询语句。 将 SQL 查询语句与以下 ADSI 搜索接口一起使用:
- 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 域中用户容器的 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 之间创建异类联接。
相关主题