Udostępnij za pośrednictwem


Parametry i wykonanie planu ponownego użycia

Korzystanie z parametrów, włączając parametru ADO, OLE DB i aplikacji ODBC można zwiększyć ponownego użycia planów wykonanie.

Uwaga dotycząca zabezpieczeńUwaga dotycząca zabezpieczeń

Przy użyciu parametrów lub parametr znaczników do przechowywania wartości wpisywanych przez użytkowników końcowych jest bezpieczniejsze niż konkatenację wartości na ciąg znaków, który następnie jest wykonywane przy użyciu albo dostępu do danych metoda interfejsu API, instrukcja EXECUTE lub sp_executesql procedura składowana.

Jedyną różnicą między dwie poniższe instrukcje SELECT jest wartości, które są porównywane w klauzula WHERE:

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

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

Jedyną różnicą między planami wykonanie tych kwerend jest wartość przechowywana dla porównania przeciwko ProductSubcategoryID kolumna.Podczas, gdy celem jest SQL Server zawsze rozpoznaje, że oświadczenia wygenerować zasadniczo planu i ponownego użycia planów, SQL Server czasami nie wykrywać w złożonych instrukcji SQL.

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

  • W Transact-SQL, użyj sp_executesql:

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

    Ta metoda jest zalecana dla Transact-SQL wyzwalaczy, które dynamicznego generowania instrukcji SQL, procedury przechowywane lub skrypty.

  • 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 z programu zmienna.Byłoby na przykład, wykonaj następujące czynności w aplikacji ODBC:

    • Użyj SQLBindParameter do powiązania zmiennej całkowitą pierwszy znacznik parametru w instrukcja języka SQL.

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

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

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

      SQL Server Macierzystego klienta dostawcy OLE DB i SQL Server sterownik ODBC macierzystym klienta SQL Server za pomocą sp_executesql do wysyłania instrukcji, aby SQL Server użyto parametru w aplikacji.

  • Aby zaprojektować procedur przechowywanych, które używają parametrów przez projekt.

Jeśli użytkownik nie jawnie kompilacji parametrów do projektowania aplikacji, można również polega na SQL Server optymalizator kwerendy automatycznie Definiowanie parametrów niektórych kwerend za pomocą domyślne zachowanie przez Parametryzacja proste.Alternatywnie można wymusić optymalizator kwerendy, należy rozważyć parametryzacja wszystkie kwerendy bazy danych przez ustawienie opcji PARAMETRYZACJA instrukcja ALTER DATABASE WYMUSZONY.Aby uzyskać więcej informacji, zobacz Parametryzacja wymuszony.

Po włączeniu zmuszony parametryzacja parametryzacja proste nadal może wystąpić.Na przykład poniższa kwerenda nie sparametryzowana zgodnie z regułami parametryzacja wymuszony:

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

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