存储过程为参数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 ...
随机推荐
- Django框架ORM单表删除表记录_模型层
此方法依赖的表是之前创建的过的一张表 参考链接:https://www.cnblogs.com/apollo1616/p/9840354.html 1.删除方法就是delete(),它运行时立即删除对 ...
- Java for LeetCode 109 Convert Sorted List to Binary Search Tree
Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...
- Java for LeetCode 099 Recover Binary Search Tree
Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...
- 获取原生的DOM方式,DIY脚手架,vue-cli的使用
一 . 获取原生的DOM的方式 在js中,我们可以通过id, class 或者标签获取DOM元素,vue中也为我们提供了获取原生DOM的方法,就是给标签或者组件添加 ref 属性,通过 this.$r ...
- Linux之make的用法讲解
在 Linux环境下使用 GNU 的 make工具能够比较容易的构建一个属于你自己的工程,整个工程的编译只需要一个命令就可以完成编译.连接以至于最后的执行.不过这需要我们投入一些时间去完成一个或者多个 ...
- Mockito @BeforeClass @BeforeMethod @BeforeTest 的生命周期
@BeforeClass---@AfterClass 类实例化前, 被执行, 主要用于设置环境变量等, 与SpringTestContext结合用的时候要注意, 这种情况下@autowire的bean ...
- 分享知识-快乐自己:SpringMVC 底层执行原理解析
底层实现原理图: 观看底层代码: 1):打开 web.xml 文件 2):按住 Ctrl + 鼠标左键 进入底层查看源码 3):按住 Ctrl+o 找到对应的方法doDispatch 5): ...
- 关于禁用bootstrap响应式解决方法
前几天接到一个任务,用bootstrap框架写几个静态页面,由于长时间专注于后台开发,所以,花费了3天时间,才终于写完了页面,其中,来回的修改,把遇到的问题说一下. 用bootstarp做完页面后,组 ...
- Ubuntu 16.04上编译SkyEye的测试程序
一.首先确保Ubuntu系统上已经安装了Skyeye.skyeye-testsuite和arm-linux-gcc交叉编译工具链,如果没有安装请参考: 1.Skyeye的安装:http://www.c ...
- Seal Report结合MySQL数据库 报表展现_20161011
昨天留了草稿 未来得及发 今日补发一篇 seal report 操作类似excel数据透视表也包含行标签和列标签及值标签,行列代表的是数据指标的维度,值标签代表的是度量. seal report连接M ...