关闭

SQL多条件查询

1684人阅读 评论(0) 收藏 举报

学习笔记:.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型,''显然会报错
 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:16177次
    • 积分:257
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条