SQL點滴29 錯誤無處不在

2021-09-06 08:20:58 字數 1600 閱讀 3924

我只想說以下是很基礎的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上面這個是最終正確的寫法,看上去很簡單吧,但是有些地方是容易犯錯的。

錯誤1if 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包起來。

錯誤2if 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點滴29 錯誤無處不在

原文 sql點滴29 錯誤無處不在 我只想說以下是很基礎的sql知識,但是很容易犯錯。所以睜大我們的眼睛,屏住我們的呼吸,小心的檢查吧!案例1 if not exists select orderid from corpemailsendqueue where orderid 600643425 b...

SQL點滴29 錯誤無處不在

我只想說以下是很基礎的sql知識,但是很容易犯錯。所以睜大我們的眼睛,屏住我們的呼吸,小心的檢查吧!案例1 if not exists select orderid from corpemailsendqueue where orderid 600643425 begin exec sp3 corp...

系統無處不在

本書最大的啟示 西方的科學通常是一種不斷的從大到小範圍內進行不停的劃分,當把問題劃分到足夠小的時候就可以解決。但是本書是一種逆向的方式,以整體化和系統化的方式看待問題,尤其是將問題還原到系統中的觀點極其的獨特,有非常高的借鑑意義。系統化思維在自然和社會的方方面面都在發揮著重要的作用。我們在看待某個問...