Dialetto SQL
Il dialetto SQL, derivato dal linguaggio Structured Query, usa espressioni leggibili per definire istruzioni di query. Usare un'istruzione di query SQL con le interfacce di ricerca ADSI seguenti:
- Interfacce ADO (ActiveX Data Object), ovvero interfacce di automazione che usano OLE DB.
- OLE DB, ovvero un set di interfacce C/C++ per l'esecuzione di query sui database.
Le istruzioni SQL richiedono la sintassi seguente.
SELECT [ALL] * | select-list FROM 'ADsPath' [WHERE search-condition] [ORDER BY sort-list]
Nella tabella seguente sono elencate le parole chiave dell'istruzione query SQL.
Parola chiave | Descrizione |
---|---|
SELECT | Specifica un elenco delimitato da virgole di attributi da recuperare per ogni oggetto. Se si specifica *, la query recupera solo l'ADsPath di ogni oggetto. |
FROM | Specifica l'ADsPath della base della ricerca. Ad esempio, il percorso ADsPath del contenitore Users in un dominio di Active Directory potrebbe essere "LDAP://CN=Users,DC=Fabrikam,DC=COM". Tenere presente che il percorso è racchiuso tra virgolette singole ('). |
WHERE | Parola chiave facoltativa che specifica il filtro di query. |
ORDER BY | Parola chiave facoltativa che genera un ordinamento lato server se il server supporta il controllo di ordinamento LDAP. Active Directory supporta il controllo di ordinamento, ma può influire sulle prestazioni del server, in particolare se il set di risultati è di grandi dimensioni. L'elenco di ordinamento è un elenco delimitato da virgole di attributi in base ai quali eseguire l'ordinamento. Tenere presente che Active Directory supporta solo una singola chiave di ordinamento. È possibile usare le parole chiave FACOLTATIVE ASC e DESC per specificare un ordinamento crescente o decrescente; il valore predefinito è crescente. La parola chiave ORDER BY esegue l'override di qualsiasi chiave di ordinamento specificata con la proprietà "Sort on" dell'oggetto ADO Command. |
Nota
Nei casi in cui viene usato un set di caratteri MultiByte, se la ricerca viene eseguita da ADO con il dialetto SQL, non è possibile usare una barra rovesciata per eseguire l'escape dei caratteri. È invece necessario usare le sequenze di escape elencate in Caratteri speciali. Ad esempio, per un'istruzione che usava la sintassi "samAccountName=(Test", che usa la barra rovesciata "\", per eseguire l'escape delle parentesi aperte, "("invece, sostituire la barra rovesciata con il carattere speciale "\28", come indicato di seguito: "samAccountName=\28Test".
Le istruzioni di query seguenti sono esempi di dialetto SQL in ADSI.
Per cercare tutti gli oggetti gruppo.
SELECT ADsPath, cn FROM 'LDAP://DC=Fabrikam,DC=COM' WHERE objectCategory='group'
Per cercare tutti gli utenti il cui cognome inizia con la lettera 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 grammatica formale per le query SQL è definita nell'esempio di codice seguente. Tutte le parole chiave non fanno distinzione tra maiuscole e minuscole.
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
I inner join SQL non sono supportati dal provider OLE DB di Active Directory, ma è possibile usare SQL per aggiungere dati SQL e Active Directory. Per altre informazioni, vedere Creazione di un join eterogeneo tra SQL Server e Active Directory.