您的位置:首页 > 数据库

SQL多条件查询

2007-10-01 01:55 225 查看
学习笔记:.net/ 2007-10-01

在SQL里进行多条件查询----

参阅http://topic.csdn.net/t/20060630/17/4853528.htmlhttp://blog.csdn.net/ajqc/archive/2004/08/13/73125.aspx

总结出正确的书写格式:

格式一:

学习笔记:.net/ 2007-10-01

在SQL里进行多条件查询----

参阅http://topic.csdn.net/t/20060630/17/4853528.htmlhttp://blog.csdn.net/ajqc/archive/2004/08/13/73125.aspx

总结出正确的书写格式:

格式一:

ALTER PROCEDURE [dbo].[ap_intranetDHCPGetByIPAddressNameMacSel]
(
@IPAddress nvarchar (255) ,
@Name nvarchar (255) ,
@Mac nvarchar (255)
)
AS
SELECT
dhcpID,
[IPAddress],
[Name],
[Description],
[Mac],
[Switch],
[Port],
[AdminSvc],
[InternalSvc],
[ExternalSvc]
FROM
intranetdhcp
WHERE
(
([IPAddress] like '%'+ @IPAddress + '%') or
(@IPAddress='')
) and
([Name]like '%'+@Name+'%' or @Name='') and
([Mac] like '%'+@Mac+'%' or @Mac='')
order by
[IPAddress]

格式二

例如有一个表A的结构如下

ID int 编号

name varchar(10) 名字

sex bit 性别

假如要构建一个存储过程,查询这个表,要这表的其中0个到3个满足这特定条件的话,我们可以这样设计:

ALTER PROCEDURE dbo.NewSelectCommand
(
@ID int,
@name nvarchar(18),
@sex bit
)
AS
SET NOCOUNT ON;
SELECT ID, name, sex FROM A where (id=@ID or @ID is null) and (name=@name or @name is null) and (sex=@sex or @sex is null)

''与null的意义是不同的: null表示没有输入,''表示输入了值为'' 所以用null更容易理解,并且除字符型字段外其它为空的字段必须转换 null应该在调用时用DBNull.Value传给参数,而不是在sp中加:
if @IPAddress = '' set @IPAddress = null

另外Isnull()还是有漏洞的,也无法达到模糊查询。但IPAddress,Name, Mac之类感觉上并不需要用到模糊查询。但是,对于int型,''显然会报错

格式二

例如有一个表A的结构如下

ID int 编号

name varchar(10) 名字

sex bit 性别

假如要构建一个存储过程,查询这个表,要这表的其中0个到3个满足这特定条件的话,我们可以这样设计:

ALTER PROCEDURE dbo.NewSelectCommand
(
@ID int,
@name nvarchar(18),
@sex bit
)
AS
SET NOCOUNT ON;
SELECT ID, name, sex FROM A where (id=@ID or @ID is null) and (name=@name or @name is null) and (sex=@sex or @sex is null)

''与null的意义是不同的: null表示没有输入,''表示输入了值为'' 所以用null更容易理解,并且除字符型字段外其它为空的字段必须转换 null应该在调用时用DBNull.Value传给参数,而不是在sp中加:
if @IPAddress = '' set @IPAddress = null

另外Isnull()还是有漏洞的,也无法达到模糊查询。但IPAddress,Name, Mac之类感觉上并不需要用到模糊查询。但是,对于int型,''显然会报错
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: