|
導(dǎo)讀數(shù)據(jù)庫(kù),簡(jiǎn)而言之可視為電子化的文件柜——存儲(chǔ)電子文件的處所,用戶可以對(duì)文件中的數(shù)據(jù)進(jìn)行新增、截取、更新、刪除等操作。所謂“數(shù)據(jù)庫(kù)”是以一定方式儲(chǔ)存在一起、能與多個(gè)用戶共享、具有盡可能小的冗余度、與應(yīng)... 數(shù)據(jù)庫(kù),簡(jiǎn)而言之可視為電子化的文件柜——存儲(chǔ)電子文件的處所,用戶可以對(duì)文件中的數(shù)據(jù)進(jìn)行新增、截取、更新、刪除等操作。所謂“數(shù)據(jù)庫(kù)”是以一定方式儲(chǔ)存在一起、能與多個(gè)用戶共享、具有盡可能小的冗余度、與應(yīng)用程序彼此獨(dú)立的數(shù)據(jù)集合。 一、首先從sqlserver中error講起,sql中錯(cuò)誤處理有些怪辟 錯(cuò)誤級(jí)別同是16但結(jié)果都不同。 select * from 一個(gè)不在的表 if @@error<>0 print ’’這個(gè)沒(méi)有輸出’’ go raiserror(’’’’,16,3) if @@error<>0 print ’’這個(gè)輸出了’’ go exec(’’select * from 一個(gè)不在的表’’) if @@error<>0 print ’’這個(gè)輸出了’’ go exec sp_executesql n’’select * from 一個(gè)不在的表’’ if @@error<>0 print ’’這個(gè)輸出了’’ 這樣你可以發(fā)現(xiàn)通過(guò)exec或sp_executesql執(zhí)行可疑的sql,這樣就可以在后面捕捉到被異常終止的錯(cuò)誤。 二、引出孤立事務(wù): 1、孤立事務(wù)的產(chǎn)生 select @@trancount 當(dāng)前連接的活動(dòng)事務(wù)數(shù) --當(dāng)前連接的活動(dòng)事務(wù)數(shù)為0 begin tran select * from 一個(gè)不在的表 if @@error<>0 begin print ’’沒(méi)有執(zhí)行到這里來(lái)!’’ if @@trancount<>0 rollback tran end commit tran select @@trancount 當(dāng)前連接的活動(dòng)事務(wù)數(shù) --執(zhí)行后你看看 當(dāng)前連接的活動(dòng)事務(wù)數(shù)為1,且重復(fù)執(zhí)行會(huì)每次累加,這是很耗資源的。 應(yīng)為rollback根本就沒(méi)有被回滾。 2、使用現(xiàn)有手段解決孤立事務(wù) print @@trancount print ’’當(dāng)前連接的活動(dòng)事務(wù)數(shù)’’ --當(dāng)前連接的活動(dòng)事務(wù)數(shù)為0 if @@trancount<>0 rollback tran --在這里寫可以讓孤立事務(wù)只保持到下次你的過(guò)程被調(diào)用 begin tran select * from 一個(gè)不在的表 if @@error<>0 begin print ’’沒(méi)有執(zhí)行到這里來(lái)!’’ if @@trancount<>0 rollback tran end commit tran ---執(zhí)行后你看看 當(dāng)前連接的活動(dòng)事務(wù)數(shù)為1,但重復(fù)執(zhí)行不會(huì)累加 print @@trancount print ’’當(dāng)前連接的活動(dòng)事務(wù)數(shù)’’ 三、使用 set xact_abort 來(lái)控制部分違反約束的錯(cuò)誤的執(zhí)行過(guò)程 create table table1 (a int check(a>100)) go set xact_abort on begin tran insert table1 values(10) print ’’這里沒(méi)有被執(zhí)行’’ commit tran go print ’’’’ print ’’==============================================’’ print ’’’’ set xact_abort off begin tran insert table1 values(10) print ’’這里被執(zhí)行’’ commit tran go drop table table1 但 set xact_abort 對(duì)于編譯產(chǎn)生的錯(cuò)誤確沒(méi)有起作用,且同樣會(huì)產(chǎn)生孤立事務(wù) set xact_abort on begin tran insert 一個(gè)不在的表 values(10) print ’’這里沒(méi)有被執(zhí)行’’ commit tran go print ’’’’ print ’’==============================================’’ print ’’’’ set xact_abort off begin tran insert 一個(gè)不在的表 values(10) print ’’這里沒(méi)有被執(zhí)行’’ commit tran go select @@trancount 當(dāng)前連接的活動(dòng)事務(wù)數(shù) ---有兩個(gè)孤立事務(wù) if @@trancount<>0 rollback tran 全新的路由器不僅讓你更穩(wěn)定快速地連接無(wú)線網(wǎng)絡(luò),更可以讓家中的智能設(shè)備連接在一起。 |
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!