导火索:在优化存储过程中发现一些WHERE和JOIN ON语句带有1=1的条件。
为了方便sql条件的拼接:
实例:
DECLARE @SQL1 NVARCHAR(MAX),@SQL2 NVARCHAR(MAX),@CLASSID INT SET @CLASSID=2 SELECT @SQL1=‘SELECT * FROM W_Question WHERE 1=1‘ IF ISNULL(@CLASSID,0)<>0 SELECT @SQL1=@SQL1+‘AND CLASSID=‘+CONVERT(NVARCHAR(10),@CLASSID)
最终拼接出来的语句是:
SELECT * FROM W_Question WHERE 1=1 AND CLASSID=2
如果没有1=1的条件则会出现:
SELECT * FROM W_Question WHERE AND CLASSID=2
或者:
SELECT * FROM W_Question WHERE
这样的SQL语句,造成错误
因为查询分析器在代数树优化阶段就把1=1 直接给过滤掉了,所以1=1对性能无影响。
实例:
SELECT * FROM W_Question SELECT * FROM W_Question WHERE 1=1
本文出自 “sukun” 博客,请务必保留此出处http://sukunwu.blog.51cto.com/10453116/1676267
原文地址:http://sukunwu.blog.51cto.com/10453116/1676267