存儲過程為參數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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM