为什么有人会WHERE 1=1 AND <conditions>在SQL子句中使用(通过串联字符串获得的SQL,视图定义)
我已经在某处看到这将用于防止SQL注入,但它似乎非常奇怪.
如果有注射WHERE 1 = 1 AND injected OR 1=1会产生相同的结果injected OR 1=1.
稍后编辑:视图定义中的用法如何?
谢谢您的回答.
但是,我不明白为什么有人会使用这种结构来定义视图,或者在存储过程中使用它.
以此为例:
CREATE VIEW vTest AS
SELECT FROM Table WHERE 1=1 AND table.Field=Value
Run Code Online (Sandbox Code Playgroud) 对于我的SQL查询,我通常对SELECT语句执行以下操作:
SELECT ...
FROM table t
WHERE 1=1
AND t.[column1] = @param1
AND t.[column2] = @param2
Run Code Online (Sandbox Code Playgroud)
如果我需要添加/删除/注释任何WHERE子句,这将使它变得容易,因为我不必关心第一行.
使用此模式时是否有任何性能损失?
附加信息:
绵羊模拟器和所有其他未获得使用的实例.
假设上面的查询,我需要将@param1更改为不包含在查询中:
1 = 1时:
...
WHERE 1=1 <-- no change
--AND t.[column1] = @param1 <-- changed
AND t.[column2] = @param2 <-- no change
...
Run Code Online (Sandbox Code Playgroud)
没有1 = 1:
...
WHERE <-- no change
--t.[column1] = @param1 <-- changed
{AND removed} t.[column2] = @param2 <-- changed
...
Run Code Online (Sandbox Code Playgroud) 我正在经历一些我正在维护的查询,并且程序员已经向我提出了"其中1 = 1"的查询,似乎总是评估为真.
这有好处吗?
重复: 为什么有人在SQL子句中使用WHERE 1 = 1 AND?
这个问题不是这个问题的答案.
WHERE子句:
select * from table where 1=1 and sStatus not in ('status1','status2','status3')
Run Code Online (Sandbox Code Playgroud)
没有编程或如果声明推动和在那里.直接查询.
如果你可以取消关闭它,我想知道是否有目的,以便我可以重写并删除1 = 1,如果没有必要.