下面是一个查询信息的存储过程:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
goALTER PROCEDURE [dbo].[selectsw] @bedate datetime,
@enddate datetime,
@bc nvarchar(8),
@sgdw nvarchar(20),
@zrr nvarchar(8),
@ccr nvarchar(8),
@swlb nvarchar(8)
AS
select * from swxxb where rq>=@bedate and rq<=@enddate and wzlx like @bc+'%' and sgdw like @sgdw+'%' and zrrxm like '%'+@zrr+'%' and swfxr like '%'+@ccr+'%' and swlb like @swlb+'%'在下知道用“%”是为了实现模糊查询,但是为什么要写成“ swlb like @swlb+'%' ”?直接写成“swlb = @swlb”不可以吗?这样写有什么好处呢?
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
goALTER PROCEDURE [dbo].[selectsw] @bedate datetime,
@enddate datetime,
@bc nvarchar(8),
@sgdw nvarchar(20),
@zrr nvarchar(8),
@ccr nvarchar(8),
@swlb nvarchar(8)
AS
select * from swxxb where rq>=@bedate and rq<=@enddate and wzlx like @bc+'%' and sgdw like @sgdw+'%' and zrrxm like '%'+@zrr+'%' and swfxr like '%'+@ccr+'%' and swlb like @swlb+'%'在下知道用“%”是为了实现模糊查询,但是为什么要写成“ swlb like @swlb+'%' ”?直接写成“swlb = @swlb”不可以吗?这样写有什么好处呢?
--不等于
swlb=@swlb --要完全等于
insert @t select 'abc'
insert @t select 'abcde'
select * from @t where col like 'abc%'
/*
col
----------
abc
abcde
*/
select * from @t where col ='abc'
/*
col
----------
abc
*/
swlb=@swlb是精确查询,字符串只能等于=@swlb
可是这样做是不是有什么好处?只是“swlb like @swlb+'%' 最前面等于@swlb”那么简单吗?
charindex(@swlb,swlb)=1 --第一个位置找到