delete語句要注意的BUG

2022-03-05 12:12:58 字數 937 閱讀 3686

今天在sqlserver 2012中執行下面的sql語句,發現userprofile表和userrole表的資料被全部刪掉了,好奇怪。

delete from [dbo].[userprofile] where userid=(select userid from dbo.[user] where username='admin0001')

delete from [dbo].[userrole] where userid=(select userid from dbo.[user] where username='admin0001')

delete from [dbo].[user] where  username='admin0001' 

執行where條件的子查詢select userid from dbo.[user] where username='admin0001',報錯:invalid column name 'userid'. 原來user表中叫id,而不是userid,然而為什麼編譯器編譯通過呢?而且竟然無視後面的where條件,執行不帶where條件的。delete from [user]語句。 

如果是下面的語句 delete from [dbo].[userrole] where userid=(select userid2 from dbo.[user] where username='admin0001') 則執行時候報錯。(點選企業管理器中的√,進行語法解析的時候,並不會報錯,因為語法只能檢查系統關鍵字,不能檢查資料庫物件:表和列)

delete2 from [dbo].[userrole] where userid=(select userid2 from dbo.[user] where username='admin0001') 這樣語法檢查都不過了。

奇怪的是,現在執行之前語句,並不會刪除資料了。

反正要注意一點。1. 語法 2.資料邏輯,特別是不會報錯,但是很容易混淆的地方。

if else語句需要注意的問題

if else 例題if else語句是一種分支結構,當條件滿足時,有 if語句 和 else語句 兩條分支。表示式的值在邏輯上只有真和假,故 if 和 else 在執行流程上是互斥的,執行且只能執行兩者中的乙個。if 條件表示式 else 條件表示式可以是關係表示式 邏輯表示式 算術表示式或混合表...

二分查詢需要注意的Bug

不應該使用middle left right 2這種情況,否則對於大資料來說會產生溢位問題。切記!值不同的時候,left相對middle應該 1,不要直接用middle進行賦值。include include using namespace std 下面乙個移位是一樣的,相當於除去2,主要是要用ri...

bug小解 運用targets分支要注意

如果專案中有targets分支時,往專案中新增一定要注意勾選分支選項!否則再你執行分支時會出現不必要的bug,很難找出原因!如果你沒有新增再專案中得話 如下圖 執行時會出現 出現這中錯誤一般是沒有匯入需要的框架或者編譯檔案!而框架已經新增完全,分析半天之後,當在編譯檔案新增需要的.m檔案後就沒有類似...