Share via


Parametri e riutilizzo del piano di esecuzione

L'utilizzo dei parametri, inclusi gli indicatori di parametro nelle applicazioni ADO, OLE DB e ODBC, può comportare un maggiore riutilizzo dei piani di esecuzione.

ms175580.security(it-it,SQL.90).gifNota sulla protezione:
L'utilizzo di parametri o indicatori di parametro per includere i valori digitati dagli utenti offre una protezione maggiore rispetto al concatenamento dei valori in una stringa eseguita utilizzando un metodo API di accesso ai dati, l'istruzione EXECUTE o la stored procedure sp_executesql.

L'unica differenza tra le due istruzioni SELECT seguenti è rappresentata dai valori confrontati nella clausola WHERE:

SELECT * FROM AdventureWorks.Production.Product WHERE ProductSubcategoryID = 1

SELECT * FROM AdventureWorks.Production.Product WHERE ProductSubcategoryID= 4

L'unica differenza tra i piani di esecuzione delle due query è rappresentata dal valore archiviato per il confronto con la colonna ProductSubcategoryID. L'obiettivo principale di SQL Server 2005 consiste nel riconoscere sempre che le istruzioni generano essenzialmente lo stesso piano e nel riutilizzare i piani, benché ciò non sempre avvenga per istruzioni SQL particolarmente complesse.

La separazione delle costanti dall'istruzione SQL tramite i parametri consente al motore relazionale di riconoscere i piani duplicati. È possibile utilizzare i parametri come indicato di seguito:

  • In Transact-SQL è possibile utilizzare sp_executesql:

    DECLARE @MyIntParm INT
    SET @MyIntParm = 1
    EXEC sp_executesql
      N'SELECT * FROM AdventureWorks.Production.Product WHERE ProductSubcategoryID = @Parm',
      N'@Parm INT',
      @MyIntParm
    

    Questo metodo è particolarmente adatto per gli script, le stored procedure o i trigger Transact-SQL che generano istruzioni SQL in modo dinamico.

  • ADO, OLE DB e ODBC utilizzano gli indicatori di parametro. Gli indicatori di parametro sono punti interrogativi (?) che sostituiscono una costante in un'istruzione SQL e sono associati a una variabile di programma. In un'applicazione ODBC, ad esempio, verrebbero eseguite le operazioni seguenti:

    • Utilizzare SQLBindParameter per associare una variabile integer al primo indicatore di parametro di un'istruzione SQL.

    • Inserire il valore integer nella variabile.

    • Eseguire l'istruzione specificando l'indicatore di parametro (?):

      SQLExecDirect(hstmt, 
        "SELECT * FROM AdventureWorks.Production.Product WHERE ProductSubcategoryID = ?",
        SQL_NTS);
      

      Il provider OLE DB SQL Native Client e il driver ODBC di SQL Native Client inclusi in SQL Server 2005 utilizzano sp_executesql per inviare istruzioni a SQL Server 2005 quando nelle applicazioni vengono utilizzati indicatori di parametro.

  • Progettare stored procedure, che utilizzano parametri per schema.

Se non si creano parametri in modo esplicito nella progettazione dell'applicazione, è inoltre possibile basarsi su SQL Server 2005 Query Optimizer per parametrizzare automaticamente query specifiche utilizzando il funzionamento predefinito di Parametrizzazione semplice. In alternativa, è possibile forzare Query Optimizer affinché esegua la parametrizzazione di tutte le query nel database impostando su FORCED l'opzione PARAMETERIZATION dell'istruzione ALTER DATABASE. Per ulteriori informazioni, vedere Parametrizzazione forzata.

Quando viene attivata la parametrizzazione forzata, la parametrizzazione semplice può essere comunque eseguita. La query seguente, ad esempio, non può essere parametrizzata in base alle regole di parametrizzazione forzata di SQL Server 2005:

SELECT * FROM Person.Address
WHERE AddressID = 1 + 2

La query può tuttavia essere parametrizzata in base alle regole di parametrizzazione semplice. Quando un tentativo di parametrizzazione forzata ha esito negativo, viene successivamente tentata la parametrizzazione semplice.

Vedere anche

Riferimento

Oggetto SQL Statistics di SQL Server

Altre risorse

sp_executesql (Transact-SQL)
Command Parameters
Using Statement Parameters

Guida in linea e informazioni

Assistenza su SQL Server 2005