zoukankan      html  css  js  c++  java
  • 存储过程为参数NULL时的处理方法

    准备一些数据:

    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE TABLE [dbo].[Goods](
        [Projname] [nvarchar](10) NULL,
        [version] [nvarchar](10) NULL,
        [state] [nvarchar](3) NULL
    ) ON [PRIMARY]
    GO
    
    
    INSERT INTO  [dbo].[Goods] ([Projname],[version],[state])
    VALUES
    (N'A项目',N'启动会版',N'已审核'),
    (N'A项目',N'方案版',N'已审核'),
    (N'A项目',N'施工图版',N'未审核'),
    (N'B项目',N'    启动会版',N'未审核'),
    (N'B项目',N'    方案版',N'未审核'),
    (N'B项目',N'    施工图版',N'未审核')
    
    GO
    Source Code

    先来看看下面2句SQL语句,参数有值和NULL所查询到的结果:

    DECLARE @Projname NVARCHAR(10) = N'A项目'
    SELECT [Projname],[version],[state] FROM [dbo].[Goods] WHERE [Projname] = @Projname
    GO
    
    
    DECLARE @Projname NVARCHAR(10) = NULL
    SELECT [Projname],[version],[state] FROM [dbo].[Goods] WHERE [Projname] = @Projname
    GO
    Source Code

    方法一:

    DECLARE @Projname NVARCHAR(10) = N'A项目'
    SELECT [Projname],[version],[state] FROM [dbo].[Goods] WHERE [Projname] = @Projname
    GO
    
    
    DECLARE @Projname NVARCHAR(10) = NULL
    SELECT [Projname],[version],[state] FROM [dbo].[Goods] WHERE [Projname] =
    CASE WHEN @Projname IS NULL THEN [Projname] ELSE @Projname END
    
    GO
    Source Code

    方法二:

    DECLARE @Projname NVARCHAR(10) = N'A项目'
    SELECT [Projname],[version],[state] FROM [dbo].[Goods] WHERE [Projname] = @Projname
    GO
    
    
    DECLARE @Projname NVARCHAR(10) = NULL
    SELECT [Projname],[version],[state] FROM [dbo].[Goods] WHERE [Projname] = @Projname
     OR @Projname IS NULL
    GO
    Source Code

    方法三:

    DECLARE @Projname NVARCHAR(10) = N'A项目'
    SELECT [Projname],[version],[state] FROM [dbo].[Goods] WHERE [Projname] = @Projname
    GO
    
    
    DECLARE @Projname NVARCHAR(10) = NULL
    SELECT [Projname],[version],[state] FROM [dbo].[Goods] WHERE [Projname] = 
    IIF(ISNULL(@Projname, N'') = N'', [Projname], @Projname)
    GO
    Source Code

    方法四:

    DECLARE @Projname NVARCHAR(10) = N'A项目'
    SELECT [Projname],[version],[state] FROM [dbo].[Goods] WHERE [Projname] = @Projname
    GO
    
    
    DECLARE @Projname NVARCHAR(10) = NULL
    SELECT [Projname],[version],[state] FROM [dbo].[Goods] WHERE [Projname] = 
    @Projname OR ISNULL(@Projname, N'') = N''
    GO
    Source Code

    方法五:

     

    DECLARE @Projname NVARCHAR(10) = N'A项目'
    SELECT [Projname],[version],[state] FROM [dbo].[Goods] WHERE [Projname] = @Projname
    GO
    
    
    DECLARE @Projname NVARCHAR(10) = NULL
    SELECT [Projname],[version],[state] FROM [dbo].[Goods] WHERE [Projname] =
     IIF(@Projname IS NULL, [Projname], @Projname)
    GO
    Source Code

    方法六:

    DECLARE @Projname NVARCHAR(10) = N'A项目'
    SELECT [Projname],[version],[state] FROM [dbo].[Goods] WHERE [Projname] = @Projname
    GO
    
    DECLARE @Projname NVARCHAR(10) = NULL
    
    IF LEN(ISNULL(@Projname,'')) > 0
        SELECT [Projname],[version],[state] FROM [dbo].[Goods]  WHERE [Projname] = @Projname
    ELSE
        SELECT [Projname],[version],[state] FROM [dbo].[Goods]
    GO
    Source Code
  • 相关阅读:
    iOS 相册相机应用2
    运行时啊
    在iOS开发的Quartz2D使用中实现图片剪切和截屏功能
    内购
    自制数据挖掘工具分析北京房价 (二) 数据清洗
    数据挖掘工具分析北京房价 (一) 数据爬取采集
    程序员讨论 《黑客帝国》 (三) 情感
    程序员讨论《黑客帝国》(二)平衡和进化
    程序员讨论《黑客帝国》(一)真实与虚拟
    类库与框架,强类型与弱类型的闲聊
  • 原文地址:https://www.cnblogs.com/insus/p/10974588.html
Copyright © 2011-2022 走看看