Partager via


Dialecte SQL

Le dialecte SQL, dérivé du langage SQL, utilise des expressions lisibles par l’homme pour définir des instructions de requête. Utilisez une instruction de requête SQL avec les interfaces de recherche ADSI suivantes :

  • Les interfaces ADO (ActiveX Data Object), qui sont des interfaces Automation qui utilisent OLE DB.
  • OLE DB, qui est un ensemble d’interfaces C/C++ pour interroger des bases de données.

Les instructions SQL nécessitent la syntaxe suivante.

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

Le tableau suivant répertorie les mots clés d’instruction de requête SQL.

Mot clé Description
SELECT Spécifie une liste d’attributs séparés par des virgules à récupérer pour chaque objet. Si vous spécifiez *, la requête récupère uniquement l’ADsPath de chaque objet.
FROM Spécifie l’ADsPath de la base de la recherche. Par exemple, l’ADsPath du conteneur Users dans un domaine Active Directory peut être « LDAP://CN=Users,DC=Fabrikam,DC=COM ». N’oubliez pas que le chemin d’accès est placé entre guillemets simples (').
WHERE Une mot clé facultative qui spécifie le filtre de requête.
ORDER BY Une mot clé facultative qui génère un tri côté serveur si le serveur prend en charge le contrôle de tri LDAP. Active Directory prend en charge le contrôle de tri, mais il peut avoir un impact sur les performances du serveur, en particulier si le jeu de résultats est volumineux. La liste de tri est une liste d’attributs séparés par des virgules. N’oubliez pas qu’Active Directory ne prend en charge qu’une seule clé de tri. Vous pouvez utiliser les mots clés ASC et DESC facultatifs pour spécifier l’ordre de tri croissant ou décroissant ; la valeur par défaut est croissant. L’mot clé ORDER BY remplace toute clé de tri spécifiée par la propriété « Trier sur » de l’objet Ado Command.

 

Notes

Dans les cas où un jeu de caractères multioctets est utilisé, si la recherche est effectuée par ADO avec le dialecte SQL, une barre oblique inverse ne peut pas être utilisée pour les caractères d’échappement. Au lieu de cela, les séquences d’échappement répertoriées dans Caractères spéciaux doivent être utilisées. Par exemple, pour une instruction qui utilisait la syntaxe « samAccountName=(Test », qui utilise la barre oblique inverse, « \ », pour échapper la parenthèse ouverte, « ( » », à la place, vous remplacez la barre oblique inverse par le caractère spécial « \28 », comme suit : « samAccountName=\28Test ».

 

Les instructions de requête suivantes sont des exemples de dialecte SQL dans ADSI.

Pour rechercher tous les objets de groupe.

SELECT ADsPath, cn FROM 'LDAP://DC=Fabrikam,DC=COM' WHERE objectCategory='group'

Pour rechercher tous les utilisateurs dont le nom commence par la lettre H.

SELECT ADsPath, cn FROM 'LDAP://OU=Sales,DC=Fabrikam,DC=COM' WHERE objectCategory='person' AND objectClass='user' AND sn = 'H*' ORDER BY sn

La grammaire formelle pour les requêtes SQL est définie dans l’exemple de code suivant. Tous les mots clés ne respectent pas la casse.

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

Les jointures internes SQL ne sont pas prises en charge par le fournisseur OLE DB Active Directory, mais vous pouvez utiliser SQL pour joindre des données SQL et Active Directory. Pour plus d’informations, consultez Création d’une jointure hétérogène entre SQL Server et Active Directory.

Syntaxe du filtre de recherche

Dialecte LDAP

Recherche avec l’interface IDirectorySearch

Recherche avec des objets de données ActiveX

Recherche avec OLE DB