国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > SQL Server > 正文

SQL Server使用常見(jiàn)誤區(qū)

2024-08-31 00:54:50
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
SQL Server使用常見(jiàn)誤區(qū)情景重現(xiàn)案例一IF沒(méi)有添加BEGIN END,直接RETURN

例如以下語(yǔ)句

...IF XXX do sth.RETURN ...

這個(gè)語(yǔ)句看似簡(jiǎn)單,但是運(yùn)行會(huì)發(fā)現(xiàn),運(yùn)行結(jié)果不是你預(yù)想的那樣。

本來(lái)我們的意圖是想判斷某一個(gè)條件,如果符合,就停止運(yùn)行。

但是執(zhí)行之后你會(huì)發(fā)現(xiàn),無(wú)論IF真假與否,RETURN都會(huì)執(zhí)行。

解決方案

因此需要加上BEGIN END來(lái)控制。

正確的寫法

...IF XXX     BEGIN         do sth.        RETURN     END...

錯(cuò)誤原因

一般IF后面有很多語(yǔ)句時(shí)候,我們會(huì)記住用BEGIN END,但因?yàn)橐粭l語(yǔ)句,可以忽略,有時(shí)候就忘了加。

因此,最好的辦法是每一個(gè)IF后面都加上BEGIN END。

案例二在事務(wù)未提交之前試圖通過(guò)return回滾

錯(cuò)誤寫法

...begin transaction   IF XXX      BEGIN         do sth.      END   ELSE      BEGIN         RETURN--錯(cuò)誤      ENDrollback commit             ...

分析

如果BEGIN一個(gè)TRAN以后直接RETURN,事務(wù)會(huì)不會(huì)回滾?

開(kāi)啟了事務(wù),必須在RETURN之前回滾或者提交事務(wù), SQL SERVER不會(huì)自動(dòng)幫你處理這個(gè)。

正確寫法

...begin transaction   IF XXX      BEGIN         do sth.      END   ELSE   BEGIN      rollback   END commit             ...

延伸

在C#中,如果沒(méi)有使用連接池,則事務(wù)在連接斷開(kāi)和銷毀時(shí)被強(qiáng)制回滾,如果使用連接池,則事務(wù)在連接被再次使用時(shí)調(diào)用的exec sp_reset_connection存儲(chǔ)過(guò)程清理掉。如果該連接沒(méi)有被再次使用或刪除,則事務(wù)一直存在,便會(huì)一直鎖住相關(guān)資源不釋放,照常日志變大,鏡像和復(fù)制異常等情況。

參考

http://www.cnblogs.com/TeyGao/p/3522965.html

未完待續(xù)

文章來(lái)自筆者博客,使用Markdown編輯發(fā)布,原文地址:SQL Server使用常見(jiàn)誤區(qū)


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 筠连县| 辽阳市| 巴林左旗| 新平| 文安县| 大关县| 乐清市| 旅游| 阿图什市| 巴青县| 海丰县| 哈尔滨市| 沁阳市| 盐源县| 江山市| 栾城县| 北川| 古浪县| 樟树市| 武清区| 锡林浩特市| 福鼎市| 宜章县| 门源| 宜兰县| 南和县| 宁夏| 桂阳县| 平安县| 南平市| 武冈市| 南岸区| 武乡县| 若羌县| 温宿县| 莱州市| 临高县| 民县| 高陵县| 定州市| 吴堡县|