Partilhar via


Parametrização simples

No SQL Server, o uso de parâmetros ou marcadores de parâmetro nas instruções Transact-SQL aumenta a capacidade do mecanismo relacional para corresponder as instruções SQL novas com planos existentes de execução compilados anteriormente.

Observação sobre segurançaObservação sobre segurança

O uso de parâmetros ou marcadores de parâmetro para reter os valores digitados pelo usuário final é mais seguro que a concatenação dos valores em uma cadeia de caracteres executada posteriormente usando um método API de acesso a dados, a instrução EXECUTE ou o procedimento armazenado sp_executesql.

Se uma instrução SQL for executada sem parâmetros, o SQL Server parametrizará a instrução internamente para aumentar a possibilidade de correspondência com um plano de execução existente. Esse processo é chamado de parametrização simples. No SQL Server 2000, o processo era conhecido como parametrização automática.

Considere esta instrução:

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

O valor 1 ao final da instrução pode ser especificado como um parâmetro. O mecanismo relacional cria o plano de execução para este lote como se um parâmetro tivesse sido especificado no lugar do valor 1. Devido a essa parametrização simples, o SQL Server reconhece que as duas instruções a seguir geram essencialmente o mesmo plano de execução e reutilizam o primeiro plano para a segunda instrução:

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

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

Ao processar instruções SQL complexas, o mecanismo relacional pode ter dificuldade em determinar quais expressões podem ser parametrizadas. Para aumentar a capacidade do mecanismo relacional de corresponder instruções SQL complexas a planos de execução não utilizados existentes, explicitamente especifique os parâmetros que usam marcadores sp_executesql ou de parâmetro. Para obter mais informações, consulte Reutilização de parâmetros e plano de execução.

ObservaçãoObservação

Quando os operadores aritméticos +, -, *, / ou % são usados para executar conversão implícita ou explícita de valores constantes int, smallint, tinyint ou bigint para os tipos de dados float, real, decimal ou numeric, o SQL Server aplica regras específicas para calcular o tipo e a precisão dos resultados da expressão. Porém, essas regras diferem, dependendo se a consulta for parametrizada ou não. Portanto, as expressões semelhantes em consultas podem, em alguns casos, produzir resultados diferentes. Para obter mais informações, consulte int, bigint, smallint e tinyint (Transact-SQL).

No comportamento padrão de parametrização simples, o SQL Server parametriza uma classe relativamente pequena de consultas. No entanto, você pode especificar que todas as consultas de um banco de dados sejam parametrizadas, sujeitas a determinadas limitações, configurando a opção PARAMETERIZATION do comando ALTER DATABASE para FORCED. Isso pode melhorar o desempenho dos bancos de dados que suportam grandes volumes de consultas simultâneas, reduzindo a frequência de compilações de consultas. Para obter mais informações, consulte Parametrização forçada.

Alternativamente, você pode especificar que, uma consulta única e quaisquer outras que sejam sintaticamente equivalentes e apenas diferem nos valores de parâmetro, sejam parametrizadas. Para obter mais informações, consulte Especificando comportamento de parametrização de consulta usando guias de plano.

Consulte também

Referência