1、SET XACT_ABORT ON時,在事務中,若出現錯誤,系統即默認回滾事務,但只對非自定義錯誤有效
2、SET XACT_ABORT OFF,默認值,在事務中,回滾一個語句還是整個事務視錯誤的嚴重程序而定,用戶級錯誤一般不會回滾整個事務
3、存儲過程:SET Transaction Isolation Level Read語法的四種情況
SET Transaction Isolation Level Read UNCOMMITTED
使用這句東東呢可以分為四種情況,現在就在這里逐一介紹:
第一種情況:
READ COMMITTED
這句的作用是:
指定在讀取數據時控制共享鎖以避免臟讀,但數據可在事務結束前更改,從而產生不可重復讀取或幻像數據。該選項是 SQL Server 的默認值。
第二種情況:
READ UNCOMMITTED
這句的作用是:
執行臟讀或0級隔離鎖定,這表示不發出共享鎖,也不接受排它鎖。當設置該選項時,可以對數據執行未提交讀或臟讀;在事務結束前可以更改數據內的數值,行也可以出現在數據集中或從數據集消失。該選項的作用與在事務內所有語句中的所有表上設置 NOLOCK 相同。這是四個隔離級別中限制最小的級別。
第三種情況:
REPEATABLE READ
這句的作用是:
鎖定查詢中使用的所有數據以防止其他用戶更新數據,但是其他用戶可以將新的幻像行插入數據集,且幻像行包括在當前事務的后續讀取中。因為並發低於默認隔離級別,所以應只在必要時才使用該選項。
第四種情況:
SERIALIZABLE
這句的作用是:
在數據集上放置一個范圍鎖,以防止其他用戶在事務完成之前更新數據集或將行插入數據集內。這是四個隔離級別中限制最大的級別。因為並發級別較低,所以應只在必要時才使用該選項。該選項的作用與在事務內所有 SELECT 語句中的所有表上設置 HOLDLOCK 相同。
4、Exec sp_executesql @sqlPopulate 執行SQL語句
5、IF NOT EXISTS(SELECT ProductName FROM Hishop_Products WHERE ProductId = @ProductId) 是否存在某值得用法(in,not in ,exists,not esists 的區別)
6、INSERT INTO #PageIndexForSearch (ProductId) EXEC sp_executesql @SqlPopulate 將某SQL語句的執行結果,添加到臨時表
7、大家在寫查詢時,為了性能,往往會在表后面加一個nolock,或者是with(nolock),其目的就是查詢時不鎖定表,從而達到提高查詢速度的目的。
8、可以用select 或set 來為存儲過程變量設置初始值;
9、存儲過程變量是否為空的判斷為( IF @Stock IS NULL);
10、 Lower(@stock) 轉為小寫;
11,SET @ParmDefinition = N'@SearchText nvarchar(256)' 前面的“N” 用於解決統一編碼問題;
12、CAST(@TopCount AS VARCHAR(10)) 類型轉換;
13、 SELECT @CurrentUserAccountStatus = UserAccountStatus FROM Hishop_Users WHERE UserId = @UserId