SQL Server里简单参数化的痛苦
在今天的文章里,我想谈下对于即席SQL语句(ad-hoc SQL statements),SQL Server使用的 简单参数化(Simple Parameterization) 的一些特性和副作用。首先,如果你的SQL语句包含这些, 简单参数化 不会发生: JOIN IN BULK INSERT UNION INTO DISTINCT TOP GROUP BY HAVING COMPUTE Sub Queries 一般来说,如果你处理所谓的 安全执行计划(Safe Execution Plan) ,SQL Server自动参数化你的SQL语句:不管提供的参数值,查询总必须通向一样的执行计划。如果你的执行计划里有书签查找,这就是不可能的例子。因为 临界点 定义了是否进行书签查找还是全表/聚集索引扫描。 自动参数化并不那么酷! 如果SQL Server能自动参数化你的SQL语句,你还是要考虑下SQL Server引入的自动参数化SQL语句的一些副作用。我们来看一个具体的例子。下列查询创建一个表,执行一个会被SQL Server自动参数化的简单SQL语句。 1 -- Create a simple table 2 CREATE TABLE Orders 3 ( 4 Col1 INT IDENTITY(1, 1) PRIMARY KEY NOT NULL, 5 Price DECIMAL