SQL点滴29—错误无处不在

简介: 原文:SQL点滴29—错误无处不在我只想说以下是很基础的sql知识,但是很容易犯错。所以睁大我们的眼睛,屏住我们的呼吸,小心的检查吧! 案例1if not exists (select OrderID from CorpEmailSendQueue where orderid=600643425)...
原文: SQL点滴29—错误无处不在

我只想说以下是很基础的sql知识,但是很容易犯错。所以睁大我们的眼睛,屏住我们的呼吸,小心的检查吧!
 
案例1
if not exists (select OrderID from CorpEmailSendQueue where orderid=600643425)
begin
    exec sp3_CorpEmailSendQueue_i @ID=NULL,@OrderID=600643425, @OrderType='F', @EmailType='-2',@ResendTime=0,@SendTime=NULL,@CurrentStatus='u',@GenerateTime=NULL
end

上面这个是最终正确的写法,看上去很简单吧,但是有些地方是容易犯错的。

 

错误1

if not exists select count(1) from CorpEmailSendQueue where orderid=600643425
begin
    exec sp3_CorpEmailSendQueue_i @ID=NULL,@OrderID=600643425, @OrderType='F', @EmailType='-2',@ResendTime=0,@SendTime=NULL,@CurrentStatus='u',@GenerateTime=NULL
end

看上去没问题吧,但是就会报错,错误提示如下:

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'select'. 需要使用园括号把select count(1) from CorpEmailSendQueue where orderid=600643425包起来。

 

错误2

if not exists (select count(1) from CorpEmailSendQueue where orderid=600643425)
begin
    exec sp3_CorpEmailSendQueue_i @ID=NULL,@OrderID=600643425, @OrderType='F', @EmailType='-2',@ResendTime=0,@SendTime=NULL,@CurrentStatus='u',@GenerateTime=NULL
end

看上去也没有问题吧,但是把OrderID换成count(1)之后exists就不起作用了,select count(1) from CorpEmailSendQueue where orderid=600643425 在任何情况下都是有值的,我的意思是即使是0也是exists的,所以任何情况下都不会执行下面的存储过程。

案例2

select datediff(hh,'2013-11-21 16:50','2013-11-21 17:35') 这个得到的结果居然是1,我再想sql server是不是抽风了,这两个时间之间相差45分钟,还不到1小时,无奈只能使用select datediff(mi,'2013-11-21 16:50','2013-11-21 17:35')得到的结果是45。

还有个小知识,如果要得到当前时间可以用getdate(),如果是utc时间呢,就是当前时间减8,可以使用getutcdate()。

 

 

 

 

 

 

 

 

 

目录
相关文章
|
SQL 前端开发 Windows
SQL Sever2012安装错误——Windows Installer错误消息:打开安装日志文件的错误的原因及解决方案
由于要对着错误信息来解决,所以此处是用手机拍摄的,如果看不清楚可以看下面的文字版;此处的错误是在安装程序支持规则中爆出的
347 0
SQL Sever2012安装错误——Windows Installer错误消息:打开安装日志文件的错误的原因及解决方案
Java程序员最容易犯的十大SQL错误,你犯过几次?
前言 Java程序员编程时需要混合面向对象思维和一般命令式编程的方法,能否完美地将两者结合起来完全得依靠编程人员的水准: 技能:任何人都能容易学会命令式编程 模式:有些人用“模式-模式”,举个例子,模式可以应用到任何地方,而且都可以归为某一类模式 心境:首先,要写个好的面向对象程序是比命令式程序难得多,你得花费一些功夫 但当Java程序员写SQL语句时,一切都不一样了。SQL是说明性语言而非面向对象或是命令式编程语言。在SQL中要写个查询语句是很简单的。但在Java里类似的语句却不容易,因为程序员不仅要反复考虑编程范式,而且也要考虑算法的问题。 下面是Java程序员在写SQL时常犯的10个错误
|
SQL 安全 数据库
sqli笔记-基于错误的SQL注入与WAF绕过
正文 测试的是登陆功能,此功能会向数据库发送查询的请求,这里我们仔细来看一下,获取我的数据并通过 POST 请求发送。 工具使用的是Burp Suite,这里拦截了请求并将其发送到repeater:
248 0
sqli笔记-基于错误的SQL注入与WAF绕过
|
SQL Java 数据库连接
MyBatis动态SQL的List传值错误
MyBatis动态SQL的List传值错误
114 0
|
SQL Oracle 关系型数据库
【数据库】解决 oracle: SQL 错误 [900] [42000]: ORA-00900: 无效 SQL 语句
【数据库】解决 oracle: SQL 错误 [900] [42000]: ORA-00900: 无效 SQL 语句
1834 0
【数据库】解决 oracle: SQL 错误 [900] [42000]: ORA-00900: 无效 SQL 语句
|
SQL 关系型数据库 MySQL
8 种最坑的SQL错误用法,你有没有踩过?
8 种最坑的SQL错误用法,你有没有踩过?
|
SQL 算法 前端开发
8种MySQL常见SQL错误用法详解
8种MySQL常见SQL错误用法详解
317 0
|
SQL 存储 网络协议
Sql Server 报error 40连接错误该如何解决?
经常会有小伙伴反馈连接错误,今天就给大家重现一下这个错误和解决方法吧,下次如果哪个小伙伴也遇到类似问题可以直接转发这篇文章给他。好了我们开始实验。
Sql Server 报error 40连接错误该如何解决?
|
SQL 算法 Oracle
Java程序员在写 SQL 时常犯的错误
阅读文本大概需要10分钟。
|
SQL 安全 数据库
故障解决:SQL Server数据库附加失败,错误3415、错误5120
本文为大家分享了SQL Server数据库附加失败的具体解决方法,供大家参考,具体内容如下
故障解决:SQL Server数据库附加失败,错误3415、错误5120