SQL ダイアレクト
構造化クエリ言語から派生した SQL ダイアレクトでは、人間が判読できる表現を使用してクエリ ステートメントを定義します。 次の ADSI 検索インターフェイスで SQL クエリ ステートメントを使用します。
- ActiveX データ オブジェクト (ADO) インターフェイス、これは OLE DB を使用するオートメーション インターフェイスです。
- OLE DB、これはデータベースにクエリを実行するための C/C++ インターフェイスのセットです。
SQL ステートメントには、次の構文が必要です。
SELECT [ALL] * | select-list FROM 'ADsPath' [WHERE search-condition] [ORDER BY sort-list]
SQL クエリ ステートメントのキーワードの一覧を次の表に示します。
キーワード | 説明 |
---|---|
選択 | オブジェクトごとに取得する属性のコンマ区切りのリストを指定します。 * を指定すると、クエリは各オブジェクトの ADsPath のみを取得します。 |
FROM | 検索のベースの ADsPath を指定します。 たとえば、Active Directory ドメインにある ユーザーコンテナーの ADsPath は 'LDAP://CN=Users,DC=Fabrikam,DC=COM' の場合があります。 パスは、単一引用符 (') のペアで囲まれている点に注意してください。 |
WHERE | クエリ フィルターを指定するオプションのキーワード。 |
ORDER BY | サーバーが LDAP 並べ替え制御をサポートしている場合、サーバー側の並べ替えを生成するオプションのキーワード。 Active Directory では並べ替え制御がサポートされていますが、特に結果セットが大きい場合は、サーバーのパフォーマンスに影響する可能性があります。 並べ替えリストは、並べ替える属性のコンマ区切りの一覧です。 Active Directory では 1 つの並べ替えキーのみがサポートされることに注意してください。 オプションの ASC および DESC キーワードを使用して、昇順または降順の並べ替え順序を指定できます。既定値は昇順です。 ORDER BY キーワードは、ADO Command オブジェクトの "Sort on" プロパティで指定された並べ替えキーをオーバーライドします。 |
注意
マルチバイト文字セットが使用されている場合、SQL ダイアレクトで ADO によって検索が実行される場合、バックスラッシュを使用して文字をエスケープすることはできません。 代わりに、特殊文字に記載されているエスケープ シーケンスを使用する必要があります。 たとえば、バックスラッシュ "\" を使用する構文 "samAccountName=(Test" を使用したステートメントの場合、開き括弧 "(" をエスケープするには、代わりに、"samAccountName=\28Test" のように、バックスラッシュを特殊文字 "\28" に置き換えます。
次のクエリ ステートメントは、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
SQL 内部結合は Active Directory OLE DB プロバイダーではサポートされていませんが、SQL を使用して SQL と Active Directory データを結合できます。 詳細については、「SQL Server と Active Directory 間の異種結合の作成」を参照してください。