存储过程为参数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
存储过程为参数NULL时的处理方法的更多相关文章
- learning java Objects.requireNonNull 当传入参数为null时,该方法返回参数本身
System.out.println(Objects.hashCode(obj)); System.out.println(Objects.toString(obj)); System.out.pri ...
- 后台返回数据事null时怎么进行判断
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...
- SQL SERVER中查询参数为空(null)时默认查询所有的实现
最近在项目中碰到一个比较有意思的问题,网上查找了一些方法,在这里总结分享一下. 我们经常会碰到这样的场景:需要查询数据,有一些查询条件,但是查询的时候,我们希望在某个条件为空的时候,则不筛选这个条件, ...
- 错误笔记 对象为null时调用改对象的方法会报错
对象为null时调用改对象的方法会报错
- Atitit.通过null 参数 反射 动态反推方法调用
Atitit.通过null 参数 反射 动态反推方法调用 此时,直接使用java apache的ref工具都失效了.必须要自己实现了. 如果调用接口方法的话,就不能使用apache的ref工具,可 ...
- PB中用oracle的存储过程返回记录集做数据源来生成数据窗口,PB会找不到此存储过程及不能正常识别存储过程的参数问题(转)
(转)在PB中用oracle的存储过程返回记录集做数据源来生成数据窗口 首先oracle的存储过程写法与MSSQL不一样,差别比较大. 如果是返回数据集的存储过程则需要利用oracle的包来定义游标. ...
- Sql2008中使用DataTable作为存储过程的参数
使用DataTable作为存储过程的参数 最近工作中写了几个存储过 程,需要向存储过程中传递字符串,因为SQL Server 2000中没有内置类似于 split 的函数,只好自己处理,将前台数据 ...
- 对无返回值、使用Action或Func作为参数、多重载的方法进行单元测试
VS2012 Unit Test(Void, Action, Func) —— 对无返回值.使用Action或Func作为参数.多重载的方法进行单元测试 [提示] 1. 阅读文本前希望您具备如下知识: ...
- 解决JSONObject.fromObject数字为null时被转换为0
在使用JSONObject.fromObject的时候会遇到一种情况就是当对象的某一个Double型或Integer型的属性为空的时候,转JSON的时候会变成0.当一个布尔型的属性为空的时候,转JSO ...
随机推荐
- consistence availability partition tolerance quit
理论证明
- redis自启动
$ vi /etc/init.d/redis # chkconfig: 2345 90 10 # description: Redis is a persistent key-value databa ...
- python之学习
------------------------------------------ 基本语句解析 import:导入某些模块或者文件 import random: 导入生成随机数模块 import ...
- Java for LeetCode 132 Palindrome Partitioning II
Given a string s, partition s such that every substring of the partition is a palindrome. Return the ...
- node版本管理工具 -- nvm安装与使用
新老项目维护时node环境切换麻烦怎么办? 不用担心,有了nvm ,一个命令就能切换node版本. 首先需要安装nvm工具,进入下载地址. 下载之后安装nvm. nvm安装之后还需要配置两个环境变量( ...
- windows下创建做一个类似与linux 的SFTP
在项目中经常需要做通过ftp上传文件到ftp上,如果服务器是windows版的服务器又该如何做呢,下面就给大家介绍一个软件:freeSSHd 软件地址 http://www.freesshd.c ...
- hdu1015 —— 回溯
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1015 因为之前看了下刘汝佳的<算法入门经典>,就用类似打印全排列,八皇后的方法做.本以为不 ...
- 主成分分析(PCA)与SVD奇异值分解
主要参考:https://www.zhihu.com/question/38417101/answer/94338598 http://blog.jobbole.com/88208/ 先说下PCA ...
- SpringCloud与Dubbo区别
为什么放弃Dubbo 使用SpringCloud? 相同点:SpringCloud 和Dubbo可以实现RPC远程调用框架,可以实现服务治理. 不同点: SpringCloud是一套目前比较网站微服务 ...
- 51nod 1533 && CF538F
题目:难以简述,请传送门 神犇题解Ⅰ 神犇题解Ⅱ 好劲啊跪在地上..完全没接触过K叉树的性质.. 对于每个询问,我们并不关心叶节点,只关心其他的节点.而一个完整K叉树的内节点个数是O(n/k)的, ...