分享

存储过程为参数NULL时的处理方法

 印度阿三17 2019-06-04

准备一些数据:

?

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

?

来源:http://www./content-4-224651.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多