Compartir a través de


Parametrización simple

En SQL Server, el uso de parámetros o marcadores de parámetros en instrucciones Transact-SQL aumenta la posibilidad de que el motor relacional encuentre planes de ejecución existentes y compilados previamente, que coincidan con nuevas instrucciones SQL.

Nota de seguridadNota de seguridad

La utilización de parámetros o marcadores de parámetros para contener valores que especifican los usuarios finales es más segura que la concatenación de valores en una cadena que después se ejecuta mediante un método de la API de acceso de datos, la instrucción EXECUTE o el procedimiento almacenado sp_executesql.

Si una instrucción SQL se ejecuta sin parámetros, SQL Server parametriza la instrucción internamente para aumentar las posibilidades de hacerla coincidir con un plan de ejecución existente. Este proceso se denomina parametrización simple. En SQL Server 2000, el proceso se denominaba parametrización automática.

Considere esta instrucción:

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

El valor 1 del final de la instrucción puede especificarse como un parámetro. El motor relacional genera el plan de ejecución para este lote como si se hubiera especificado un parámetro en lugar del valor 1. Debido a esta parametrización simple, SQL Server reconoce que las dos instrucciones siguientes generan esencialmente el mismo plan de ejecución y reutiliza el primer plan para la segunda instrucción:

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

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

Cuando se procesan instrucciones SQL complejas, el motor relacional puede tener dificultades para determinar qué expresiones pueden parametrizarse. Para aumentar las posibilidades de que el motor relacional encuentre planes de ejecución existentes no utilizados que coincidan con instrucciones SQL complejas, especifique explícitamente los parámetros con sp_executesql o con marcadores de parámetros. Para obtener más información, vea Parámetros y reutilización de un plan de ejecución.

[!NOTA]

Cuando se utilizan los operadores aritméticos +, -, *, /, o % para realizar una conversión implícita o explicita de valores constantes int, smallint, tinyint o bigint en tipos de datos float, real, decimal o numeric, SQL Server aplica reglas específicas para calcular el tipo y la precisión de los resultados de la expresión. Sin embargo, estas reglas varían en función de si la consulta se parametriza o no. Por lo tanto, expresiones similares utilizadas en consultas pueden, en ciertos casos, producir resultados diferentes. Para obtener más información, vea int, bigint, smallint y tinyint (Transact-SQL).

En el comportamiento predeterminado de parametrización simple, SQL Server parametriza una clase relativamente pequeña de consultas. No obstante, se puede especificar que, con algunas limitaciones, todas las consultas de una base de datos se parametricen al establecer la opción PARAMETERIZATION del comando ALTER DATABASE en FORCED. De este modo, puede que mejore el rendimiento de bases de datos que reciben grandes volúmenes de consultas simultáneas si se reduce la frecuencia de las compilaciones de consultas. Para obtener más información, vea Parametrizaciones forzadas.

O bien, puede especificar que una sola consulta, y cualquier otra que sea sintácticamente equivalente pero sólo se diferencie en los valores de parámetros, no incluya parámetros. Para obtener más información, vea Especificar el comportamiento de parametrización de consultas por medio de guías de plan.

Vea también

Referencia