Udostępnij za pośrednictwem


Parametry i wykonanie plan ponowne użycie

Korzystanie z parametrów, w tym parametru ADO i OLE DB aplikacji ODBC może zwiększyć ich ponownego użycia planów wykonania.

Security noteSecurity Note:

Za pomocą parametrów lub parametru do przechowywania wartości, które są wpisywane przez użytkowników końcowych jest bezpieczniejsze niż łączenia wartości na ciąg znaków, która następnie zostanie wykonana przy użyciu obu dostępu do danych metoda interfejsu API, instrukcja wykonać lub sp_executesql procedura przechowywana.

Jedyną różnicą między dwa następujące instrukcje SELECT jest wartości, które są porównywane za pomocą klauzula WHERE:

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

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

Jedyną różnicą między planami wykonanie tych kwerend jest wartość przechowywana dla porównania przed ProductSubcategoryID kolumna.W czasie, gdy cel jest równy SQL Server zawsze rozpoznać oświadczeń wygenerować zasadniczo taki sam, planowanie i ponownego użycia planów, SQL Server Czasami nie wykryje to w złożonych instrukcji SQL.

Oddzielanie stałych z instrukcja języka SQL przy użyciu parametrów pomaga aparat relacyjny rozpoznaje planów duplikatów.Można używać parametrów w następujący sposób:

  • W Transact-SQL, należy użyć sp_executesql:

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

    Ta metoda jest zalecana dla Transact-SQL skrypty procedur przechowywanych i wyzwalaczy, które dynamicznie generują instrukcji SQL.

  • Obiekty ADO i OLE DB ODBC za pomocą parametru.Parametr znaczniki są znaki zapytania (?) zastępuje stała w instrukcja języka SQL i są powiązane ze zmienną program.Użytkownik może na przykład, wykonaj następujące czynności w aplikacji ODBC:

    • Użycie SQLBindParameter powiązać zmienną liczbę całkowitą pierwszy znacznik parametru w instrukcja języka SQL.

    • Wartość całkowita należy umieścić w zmiennej.

    • wykonać instrukcja, określając znacznik parametru (?):

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

      The SQL Server Native klient OLE DB dostawca and the SQL Server Native klient ODBC driver included with SQL Server use sp_executesql to send statements to SQL Server when parameter markers are used in applications.

  • Aby zaprojektować procedur przechowywanych, które wykorzystują parametry zgodnie z projektem.

W przypadku nie jawnie tworzenia parametrów do projektowania aplikacji, użytkownik może również korzysta SQL Server optymalizator kwerendy, aby automatycznie parameterize niektóre kwerendy przy użyciu domyślnego zachowania programu Parametryzacja proste. Alternatywnie można wymusić optymalizator kwerendy, które należy rozważyć parametryzacja wszystkie kwerendy bazy danych przez ustawienie opcji PARAMETRYZACJI instrukcja ALTER DATABASE FORCED.Aby uzyskać więcej informacji zobaczParametryzacja wymuszony.

Po włączeniu wymuszony parametryzacji Simple parametryzacji może nadal występują.Na przykład poniższa kwerenda nie może się sparametryzowana zgodnie z regułami parametryzacji wymuszone:

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

Jednak może zostać sparametryzowana zgodnie z regułami parametryzacji proste.Podczas wymuszonego parametryzacji zostanie podjęta próba nie powiedzie się, proste parametryzacji nadal później zostanie podjęta próba.