在我这个例子中where 1=1 {0}什么意思?{0}指的哪个?

在我这个例子中where 1=1 {0}什么意思?{0}指的哪个?

问题描述:

  string table = @"select  a.IDNumber,(a.SurName||a.Name) as Name,a.Sex,a.Gzdw,a.Rszgdw,sum(CASE WHEN b.[State]=0 THEN 1 ELSE 0 END) AS wsj
,sum(CASE WHEN b.[State]=1 THEN 1 ELSE 0 END) AS sz
,sum(CASE WHEN b.[State]=2 THEN 1 ELSE 0 END) AS cz
,sum(CASE WHEN b.[State]=3 THEN 1 ELSE 0 END) AS jc 
,(select COUNT(distinct ID) from CardApplyRecord where EmployeeID=a.ID and [State]=0) AS sbz 
from Employee a inner join [Cards] b on a.IDNumber=b.IDNumber where 1=1 {0} group by a.ID,a.IDNumber,a.SurName,a.Name,a.Sex,a.Gzdw,a.Rszgdw order by a.Gzdw";

请问一下,
where 1=1 {0}什么意思?{0}指的哪个?

麻烦大佬指点一下。

这是C#里面string.Format函数所用的参数的占位符

下面应该就有
string.Format(table, " and 条件=xxx");
那么" and 条件=xxx"就自动被放在 {0} 的位置上,构成sql语句。

之所以加上1=1,这样,就不用考虑第一个条件前面不加and的问题了。
比如
select ... where 条件1=xxx and 条件2 = xxx and 条件3=xxx
很明显,条件2、3前面有and,条件1前面没有,要单独处理,麻烦

但是
select ... where 1=1 and 条件1=xxx and 条件2 = xxx and 条件3=xxx
追加条件的时候,不需要判断,都是 and 条件n=xxx

{0}是传入的其他 条件

查询SQL里的这些是主要接下来执行的预编译SQL传递参数用的.{0} 就是指第一个参数替换这个位置{0}.
比如以下伪代码, 就是把AND Name='1'替换{0}.

Statement.prepareStatement(table,"AND Name='1'");