sql逻辑语句块:
declare @fieldname varchar(50)
declare @fieldvalue nvarchar(100)
set @fieldname='chassisno' --这里可传入chassisno,plateno,owner,contacttelno其中之一或不传
set @fieldvalue='zuowenjun'
if @fieldname = 'chassisno'
begin
select * from tablename where chassisno=@fieldvalue
end
else if @fieldname = 'plateno'
begin
select * from tablename where plateno=@fieldvalue
end
else if @fieldname = 'owner'
begin
select * from tablename where [owner]=@fieldvalue
end
else if @fieldname = 'contacttelno'
begin
select * from tablename where contacttelno=@fieldvalue
end
else
begin
select * from tablename
end
用一句sql语句实现上述逻辑判断并查询结果:
DECLARE @sqltext NVARCHAR(2000)
SET @sqltext='SELECT * FROM TABLENAME WHERE ' + @fieldname + '=''' + @fieldvalue +''''
EXECUTE (@sqltext)
虽然这样看起来确实能实现逻辑判断并查询结果,但看起来不够直观,修改麻烦且容易出错,而且有一定的局限性,因为这里@fieldname与表字段相同,拼接相对容易些,若不相同的情况下,那就无法实现了,所以我这里采用了另一种方法,效率暂且不说,但绝对简单易用而且够灵活,请看如下SQL语句:
经验证这条SQL语句可以实现逻辑判断并查询结果,而且就算@fieldname与表字段不相同,也可以直接更换相应的字段即可。
原理:
因为是AND关联,所以后面括号里面的条件是必须满足,又因为括号里面采用了OR关联,所以括号里面的两边的条件是可以符合一个即可的,即若@fieldname = 'chassisno'时,则要求a.chassisno=@fieldvalue,否则只要@fieldname<>'chassisno'时,则忽略掉前前面的关联条件。注意他们的特点是互斥的,也就是OR两边的条件只能满足其中之一即可。