客户端,服务器都需要统计部门的销售量,客户端安装在各个部门,每个部门只能看到自己部门的销售量,而服务器安装在配送中心,需要统计所有部门的销售量。所以要设计一个存储过程,输入时间参数和部门编号参数。
现在遇到个问题就是如何输入一个编号参数的值让符合的数据全部显示出来。查阅网上的资料,现在得到两种方法。
第一种是用if语句。
CREATE PROCEDURE [dbo].[www]
@time datetime,
@m_id int --状态为空则查全部
AS
’若要确定表达式是否为 NULL,请使用 IS NULL 或 IS NOT NULL,而不要使用比较运算符,如 = 或 !=。如果某‘个参数为 NULL 或两个参数都为 NULL,则比较运算符将返回 UNKNOWN。
IF (@m_id IS NOT NULL)
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT msbmc,hwm,ssts,ssje,time1,dtb.mid
from dtb join jsb on dtb.jid = jsb.jid
join hwzl on dtb.hid=hwzl.hid
join msbzl on dtb.mid=msbzl.mid
where convert(varchar(20),time1,112)=convert (varchar(20),@time,112)
and dtb.mid =@m_id
end
else
begin
SELECT msbmc,hwm,ssts,ssje,time1,dtb.mid
from dtb join jsb on dtb.jid = jsb.jid
join hwzl on dtb.hid=hwzl.hid
join msbzl on dtb.mid=msbzl.mid
where convert(varchar(20),time1,112)=convert (varchar(20),@time,112)
END
执行语句:exec www '2008-05-23',null
null,是空值,是不存在或不确定的值 '',是指空字符,因此用‘’会不显示任何数据,要想查全部不能用‘’,要用null
第二种是把mid的数据类型转换为字符型后用%通配符。
%:匹配包含零个或多个字符的任意字符串。该通配符既可以用作前缀也可以用作后缀。
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
CREATE PROCEDURE [dbo].[CReport1]
@time datetime,
@m_id varchar(20)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT msbmc,hwm,ssts,ssje,time1,dtb.mid
From dtb join jsb on dtb.jid = jsb.jid
join hwzl on dtb.hid=hwzl.hid
join msbzl on dtb.mid=msbzl.mid
where convert(varchar(20),time1,112)=convert (varchar(20),@time,112)
and CAST(dtb.mid as varchar) like cast (@m_id as varchar )
END
执行语句:exec www '2008-05-23','%'
现在遇到个问题就是如何输入一个编号参数的值让符合的数据全部显示出来。查阅网上的资料,现在得到两种方法。
第一种是用if语句。
CREATE PROCEDURE [dbo].[www]
@time datetime,
@m_id int --状态为空则查全部
AS
’若要确定表达式是否为 NULL,请使用 IS NULL 或 IS NOT NULL,而不要使用比较运算符,如 = 或 !=。如果某‘个参数为 NULL 或两个参数都为 NULL,则比较运算符将返回 UNKNOWN。
IF (@m_id IS NOT NULL)
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT msbmc,hwm,ssts,ssje,time1,dtb.mid
from dtb join jsb on dtb.jid = jsb.jid
join hwzl on dtb.hid=hwzl.hid
join msbzl on dtb.mid=msbzl.mid
where convert(varchar(20),time1,112)=convert (varchar(20),@time,112)
and dtb.mid =@m_id
end
else
begin
SELECT msbmc,hwm,ssts,ssje,time1,dtb.mid
from dtb join jsb on dtb.jid = jsb.jid
join hwzl on dtb.hid=hwzl.hid
join msbzl on dtb.mid=msbzl.mid
where convert(varchar(20),time1,112)=convert (varchar(20),@time,112)
END
执行语句:exec www '2008-05-23',null
null,是空值,是不存在或不确定的值 '',是指空字符,因此用‘’会不显示任何数据,要想查全部不能用‘’,要用null
第二种是把mid的数据类型转换为字符型后用%通配符。
%:匹配包含零个或多个字符的任意字符串。该通配符既可以用作前缀也可以用作后缀。
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
CREATE PROCEDURE [dbo].[CReport1]
@time datetime,
@m_id varchar(20)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT msbmc,hwm,ssts,ssje,time1,dtb.mid
From dtb join jsb on dtb.jid = jsb.jid
join hwzl on dtb.hid=hwzl.hid
join msbzl on dtb.mid=msbzl.mid
where convert(varchar(20),time1,112)=convert (varchar(20),@time,112)
and CAST(dtb.mid as varchar) like cast (@m_id as varchar )
END
执行语句:exec www '2008-05-23','%'