ALTER PROCEDURE [dbo].[bha_pad10000] -- 存储过程名
@createuser nchar(20) = null, --设置输入参数
@primarytag1 datetime ,
@primarytag2 datetime ,
@prcode char(12)= null,
@orderno varchar(12)= null
@part varchar(30)= null,
@mono char(12)= null,
@prseq char(4)= null
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT distinct 创建人=createuser, --创建者
制程代号=prcode, --制程代号
料号=part, --料单
订单号=orderno, --订单号
制令号=mono, --制令号
制令序号=moseq,
扫描时间=primarytag,
制程序号=prseq, --制程序号
创建时间=createdate, --创建时间
检测码=checkyn,
料号编号=partcode,
产品编码=productcode,
内部编号=innercode,
外部编号=outtercode
from bha_pda10000 where
createuser like '%['+@createuser+']%' --创建者
and (createdate between @primarytag1 and @primarytag2) -- 时间
and prcode like '%['+@prcode+']%' --制程代号
and orderno like '%['+@orderno+']%' --订单号
and part like '%['+@part+']%' --料号
and mono like '%['+@mono+']%' --制令号
and prseq like '%['+@prseq+']%' --制程序号
END
刚学存储过程, 不太会写。 我要实现的功能是一个多条件模糊查询,发现写出来总是有问题。我目的是如果所有编辑框为空查询所有数据,哪个编辑框有数据就查询哪个字段,这样的功能。我写这个存储过程如果为空的时候老是查不到数据。 哪位大神帮我改改
------解决思路----------------------
alter PROCEDURE [dbo].[bha_pad10000] -- 存储过程名
@createuser nchar(20) = null, --设置输入参数
@primarytag1 datetime = null,
@primarytag2 datetime = null,
@prcode char(12)= null,
@orderno varchar(12)= null,
@part varchar(30)= null,
@mono char(12)= null,
@prseq char(4)= null
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
/*test script
[dbo].[bha_pad10000]
[dbo].[bha_pad10000] 'erere'
*/
SET NOCOUNT ON;
Declare @strsql nvarchar(max)
set @strsql=N'SELECT distinct 创建人=createuser, --创建者
制程代号=prcode, --制程代号
料号=part, --料单
订单号=orderno, --订单号
制令号=mono, --制令号
制令序号=moseq,
扫描时间=primarytag,
制程序号=prseq, --制程序号
创建时间=createdate, --创建时间
检测码=checkyn,
料号编号=partcode,
产品编码=productcode,
内部编号=innercode,
外部编号=outtercode
from bha_pda10000 where
1=1 '+coalesce(' and createuser like ''%['+rtrim(@createuser)+']%''','')
--注意日期@primarytag1,@primarytag2格式
+coalesce(' and (createdate between '+cast(@primarytag1 as varchar(30))+' and '+cast(@primarytag1 as varchar(30))+') ','')
+coalesce(' and prcode like ''%['+rtrim(@prcode)+']%''','')
+coalesce(' and orderno like ''%['+rtrim(@orderno)+']%''','')
+coalesce(' and part like ''%['+rtrim(@part)+']%''','')
+coalesce(' and mono like ''%['+rtrim(@mono)+']%''','')
+coalesce(' and prseq like ''%['+rtrim(@prseq)+']%''','')
print @strsql
exec(@strsql)
End
试试这个吧, 注意一下楼上提到的[ ]得问题,除非你得数据都是用[] 开头和结尾的,不然代码中的[] 要去除。
------解决思路----------------------
alter PROCEDURE [dbo].[bha_pad10000] -- 存储过程名
@createuser nchar(20) = null, --设置输入参数
@primarytag1 datetime ,
@primarytag2 datetime ,
@prcode char(12)= null,
@orderno varchar(12)= null, ---之前少了个逗号
@part varchar(30)= null,
@mono char(12)= null,
@prseq char(4)= null
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
declare @sql varchar(1000)
-- Insert statements for procedure here
set @sql='SELECT distinct 创建人=createuser, --创建者
制程代号=prcode, --制程代号
料号=part, --料单
订单号=orderno, --订单号
制令号=mono, --制令号
制令序号=moseq,
扫描时间=primarytag,
制程序号=prseq, --制程序号
创建时间=createdate, --创建时间
检测码=checkyn,
料号编号=partcode,
产品编码=productcode,
内部编号=innercode,
外部编号=outtercode
from bha_pda10000 where
createuser like %['+@createuser+']% --创建者'
+'and (createdate between ' + @primarytag1 +'and '+@primarytag2+') -- 时间'
+'and prcode like %['+@prcode+']% --制程代号'
+'and orderno like %['+@orderno+']% --订单号'
+'and part like %['+@part+']% --料号'
+'and mono like %['+@mono+']% --制令号'
+'and prseq like %['+@prseq+']% --制程序号'
exec(@sql)
END
试下
------解决思路----------------------
你要用动态sql
set @sql='select '+@字段+' from tb where '+条件
exec(@sql);