Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Al establecer la opción de base de datos PARAMETERIZATION en SIMPLE, el optimizador de consultas de SQL Server podría optar por parametrizar las consultas. Esta parametrización sustituye los valores literales de una consulta con parámetros. Este proceso se conoce como parametrización simple. Cuando SIMPLE la parametrización está en vigor, no puede controlar qué consultas se parametrizan y qué consultas no. Sin embargo, puede especificar que todas las consultas de una base de datos se parametrizan estableciendo la opción de base de datos PARAMETERIZATION en FORCED. Este proceso se conoce como parametrización forzada.
Puede cambiar el comportamiento de parametrización de una base de datos por medio de guías de plan tal y como se indica a continuación:
| Option | Description |
|---|---|
SIMPLE |
Puede especificar que se intenta la parametrización forzada en una determinada clase de consultas. Para ello, cree una guía de plan TEMPLATE en la forma parametrizada de la consulta y especifique la sugerencia de consulta PARAMETERIZATION FORCED en el procedimiento almacenado sp_create_plan_guide. Puede considerar este tipo de guía de plan como una forma de habilitar la parametrización forzada solo para una determinada clase de consultas, no para todas. Para obtener más información, consulte Parametrización simple. |
FORCED |
Puede especificar que para una determinada clase de consultas, solo se intenta la parametrización simple, no la parametrización forzada. Para ello, se crea una guía de plan TEMPLATE sobre la forma parametrizada forzada de la consulta y se especifica la sugerencia de consulta PARAMETERIZATION SIMPLE en sp_create_plan_guide. Para obtener más información, consulte Parametrización forzada. |
Fíjese en la consulta siguiente en la base de datos AdventureWorks2025 :
SELECT pi.ProductID,
SUM(pi.Quantity) AS Total
FROM Production.ProductModel AS pm
INNER JOIN Production.ProductInventory AS pi
ON pm.ProductModelID = pi.ProductID
WHERE pi.ProductID = 101
GROUP BY pi.ProductID, pi.Quantity
HAVING SUM(pi.Quantity) > 50;
Como administrador de bases de datos, determina que no desea habilitar la parametrización forzada en todas las consultas de la base de datos. Sin embargo, quiere evitar costos de compilación en todas las consultas que son sintácticamente equivalentes a la consulta anterior, pero que solo difieren en sus valores literales constantes. En otras palabras, desea que la consulta se parametrice para que se reutilice un plan de consulta para este tipo de consulta. En este caso, siga los pasos siguientes:
Recupere la forma parametrizada de la consulta. La única manera segura de obtener este valor para su uso en
sp_create_plan_guidees mediante el procedimiento almacenado del sistema sp_get_query_template .Cree la guía de plan de ejecución a partir de la forma parametrizada de la consulta y especifique la sugerencia de consulta
PARAMETERIZATION FORCED.Importante
Como parte de la parametrización de una consulta, SQL Server asigna un tipo de datos a los parámetros que sustituyen a los valores literales, en función del valor y el tamaño del literal. El mismo proceso se aplica al valor de los literales constantes que se pasan al parámetro de salida
@stmtdesp_get_query_template. Dado que el tipo de datos especificado en el@paramsargumento desp_create_plan_guidedebe coincidir con el de la consulta tal como está parametrizado por SQL Server, es posible que tenga que crear más de una guía de plan para cubrir el intervalo completo de posibles valores de parámetro para la consulta.
El siguiente script puede utilizarse para obtener la consulta con parámetros y, a continuación, crear una guía de plan en ella.
DECLARE @stmt AS NVARCHAR (MAX);
DECLARE @params AS NVARCHAR (MAX);
EXECUTE sp_get_query_template
N'SELECT pi.ProductID, SUM(pi.Quantity) AS Total
FROM Production.ProductModel AS pm
INNER JOIN Production.ProductInventory AS pi ON pm.ProductModelID = pi.ProductID
WHERE pi.ProductID = 101
GROUP BY pi.ProductID, pi.Quantity
HAVING SUM(pi.Quantity) > 50',
@stmt OUTPUT, @params OUTPUT;
EXECUTE sp_create_plan_guide N'TemplateGuide1',
@stmt, N'TEMPLATE', NULL,
@params, N'OPTION(PARAMETERIZATION FORCED)';
Si la parametrización forzada ya está habilitada en la base de datos, puede invalidarla para consultas específicas. Para parametrizar la consulta de ejemplo y las consultas sintácticasmente equivalentes según las reglas de parametrización simples, especifique PARAMETERIZATION SIMPLE en lugar de PARAMETERIZATION FORCED en la OPTION cláusula .
Nota:
Las guías de plan TEMPLATE asocian las instrucciones con las consultas enviadas en lotes que están formadas solamente por una instrucción. Las instrucciones incluidas en lotes de varias instrucciones no se pueden hacer coincidir con las guías de plan TEMPLATE.