闭门造SQL
用来判断一个内容类似为"55|66|9"的表字段是否含有指定的值(@ecid),
比如@ecid的值为55,66或9时,查询都将返回该条记录:
select * from events
where
ecid=@ecid or
( substring( (ecid+'|'),0,(charindex('|',ecid+'|')) ) )= @ecid
or(
substring(
(substring((ecid+'|'),(charindex('|',ecid+'|'))+1,len((ecid+'|')))),
0,
(charindex('|',(substring((ecid+'|'),(charindex('|',ecid+'|'))+1,len((ecid+'|')))))))
) = @ecid
or
(substring(
(substring((substring((ecid+'|'),(charindex('|',ecid+'|'))+1,len((ecid+'|')))),(charindex('|',(substring((ecid+'|'),(charindex('|',ecid+'|'))+1,len((ecid+'|'))))))+1,len((substring((ecid+'|'),(charindex('|',ecid+'|'))+1,len((ecid+'|'))))))) ,
0,
(charindex('|',(substring((substring((ecid+'|'),(charindex('|',ecid+'|'))+1,len((ecid+'|')))),(charindex('|',(substring((ecid+'|'),(charindex('|',ecid+'|'))+1,len((ecid+'|'))))))+1,len((substring((ecid+'|'),(charindex('|',ecid+'|'))+1,len((ecid+'|')))))))))
)
) =@ecid
比如@ecid的值为55,66或9时,查询都将返回该条记录:
select * from events
where
ecid=@ecid or
( substring( (ecid+'|'),0,(charindex('|',ecid+'|')) ) )= @ecid
or(
substring(
(substring((ecid+'|'),(charindex('|',ecid+'|'))+1,len((ecid+'|')))),
0,
(charindex('|',(substring((ecid+'|'),(charindex('|',ecid+'|'))+1,len((ecid+'|')))))))
) = @ecid
or
(substring(
(substring((substring((ecid+'|'),(charindex('|',ecid+'|'))+1,len((ecid+'|')))),(charindex('|',(substring((ecid+'|'),(charindex('|',ecid+'|'))+1,len((ecid+'|'))))))+1,len((substring((ecid+'|'),(charindex('|',ecid+'|'))+1,len((ecid+'|'))))))) ,
0,
(charindex('|',(substring((substring((ecid+'|'),(charindex('|',ecid+'|'))+1,len((ecid+'|')))),(charindex('|',(substring((ecid+'|'),(charindex('|',ecid+'|'))+1,len((ecid+'|'))))))+1,len((substring((ecid+'|'),(charindex('|',ecid+'|'))+1,len((ecid+'|')))))))))
)
) =@ecid