惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News and Events Feed by Topic
S
SegmentFault 最新的问题
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
Jina AI
Jina AI
H
Help Net Security
C
Check Point Blog
aimingoo的专栏
aimingoo的专栏
MyScale Blog
MyScale Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Vercel News
Vercel News
L
LangChain Blog
Recorded Future
Recorded Future
F
Full Disclosure
Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
I
InfoQ
GbyAI
GbyAI
B
Blog RSS Feed
T
The Blog of Author Tim Ferriss
Engineering at Meta
Engineering at Meta
A
About on SuperTechFans
M
MIT News - Artificial intelligence
爱范儿
爱范儿
V
V2EX
Microsoft Azure Blog
Microsoft Azure Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Y
Y Combinator Blog
B
Blog
WordPress大学
WordPress大学
Blog — PlanetScale
Blog — PlanetScale
W
WeLiveSecurity
MongoDB | Blog
MongoDB | Blog
Cloudbric
Cloudbric
N
News and Events Feed by Topic
The Cloudflare Blog
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
有赞技术团队
有赞技术团队
D
DataBreaches.Net
博客园 - 【当耐特】
T
Troy Hunt's Blog
V
Visual Studio Blog
V2EX - 技术
V2EX - 技术
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 司徒正美
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google Online Security Blog
Google Online Security Blog
The GitHub Blog
The GitHub Blog

博客园 - 溶入海洋中的雨滴

ADO Entities Framework不对多表查询进行优化? 【转】C#正则表达式整理备忘 【摘】UI设计中对比色颜色的选取 JavaScript中的正则表达式解析 JavaScript正则表达式exec和test方法实例! - 溶入海洋中的雨滴 - 博客园 用js实现用回车键、ctrl键在文本框导航 [原]无刷新三级连动用户控件 c#批量插入数据到数据库【支持事务操作】 SQL:定时作业的设置方法 【转】c#用柱形图、折线图和饼形图展示数据 【原】css设置布局时,尽量天上背景色 【原】JS控制控件的显示,你选择display还是visibilty 【原】js实现2个listbox的乾坤大挪移 [转]数据库设计14个技巧 【转】sql查询性能调试,用SET STATISTICS IO和SET STATISTICS TIME 【原】winform定制datagrid模板 【原】winform高效导出Excel带格式设置 【原】让3层下的objectDatasource,支持griedview不写代码具备编辑功能 推荐一个可以下.net电子书的论坛
case when遇上null值
溶入海洋中的雨滴 · 2009-10-16 · via 博客园 - 溶入海洋中的雨滴

利用存储过程对表中记录进行update,是很常见,也很容易的,但是如果更新的表有字段是允许null的、需要对是否为null做不同处理,同时该存储过程的执行命令是用sp_executesql,你会怎么处理呢,相信很多人第一时间想到的也是在update语句里用case when吧。如果你也是这样想,并这么做的话,相信你肯定郁闷的发现:

1、case when判断null值,得到相反的结果,只有是常量值的情形,执行时正常的;

2、sql server对拼接的字符串形式的sql语句中的错误,不提示错误信息,除了罢工

case when的执行结果跟我们预期的相反。请见如下脚本:
另外发现,sql  server里对拼接得到的字符串sql语句里面的错误,不做如何报错提示,仅仅是来个不理不问,无任何反映。此次case when不能正常执行null值的情况,就是我一段一段拼接的sql字符串注释后,检测出来的,汗~~。在这提供一个可用的检测语句print cash null when null then ‘null’ else ‘not null’ end)

--@Birthday=null

declare @sql nvarchar(2000)
declare @dbName nvarchar(50)

if exists(select 1 from syscfg where   isTestDB='' or isTestDB is null)
begin
    --live dataBase
    set @dbName=’dbLive’
end
else   
begin
    --test dataBase
    set @dbName='dbTest'
end

set @sql='update '+@dbName+'.dbo.PathologyHead set '     
            ----patient部分
               +' Birthday='+case @Birthday when null then 'null,' else ''''+cast(@Birthday as nvarchar(20))+''',' end  
              +' IsHKID='+case @IsHKID when 1 then '1' else '0' end+','
            +' IDType='+cast(@IDType as nvarchar(5))         
             +' where LabNumber='''+@LabNumber+''''
--print @sql
exec sp_executesql @sql

上面的对字段IsHKID的执行却是正常的,难道case when是得对非null的值才行?我将@Birthday值的是否为null,移到前面判断,执行正常,修改后的如下

set @Birthday=isnull(@Birthday,'1910-10-1') --移到下面的update中处理

set @sql='update '+@dbName+'.dbo.PathologyHead set '     
            ----patient部分
               +' Birthday='+case @Birthday when '1910-10-1' then 'null,' else ''''+cast(@Birthday as nvarchar(20))+''',' end  
              +' IsHKID='+case @IsHKID when 1 then '1' else '0' end+','
            +' IDType='+cast(@IDType as nvarchar(5))         
             +' where LabNumber='''+@LabNumber+''''
--print @sql
exec sp_executesql @sql

不知有无也遇上此种问题的朋友呢,你是如何看的,欢迎交流