T-SQL 遊標CURSOR的使用及其他
(1) T-SQL 遊標CURSOR的使用
使用起來很簡單,先定義,然後賦個值,打開,通過While Loop 一個一個讀下去,最後關閉,釋放內存。基本套路如下:
DECLARE MyCursor cursor /* 聲明遊標,默認為單純向前的遊標。如果想要前後跳來跳去的,寫成Scroll Cursor即可 */
FOR
SELECT Column1, Column2 FROM 某某表
Where 某某條件
OPEN MyCursor /* 打開遊標 */
FETCH NEXT from MyCursor Into @A, @B /* 讀取第1行數據*/
WHILE @@FETCH_STATUS = 0 /* 用WHILE循環控制遊標 */
BEGIN /*BEGIN-END 塊*/
//在這裏,用@A,@B做點事,或者改一改值什麼的.
FETCH NEXT from MyCursor Into @A, @B /* 抓下一行 */
END
CLOSE MyCursor /* 關閉遊標 */
DEALLOCATE MyCursor /* 刪除遊標,釋放內存 */
(2) 臨時表和表變量
臨時表就是臨時生成一個表放在Tempdb中,有兩種.本地臨時表,名字第一個字是"#",全局臨時表"##".
本地臨時表只是給當前連接使用,全局的誰都可以用.除了名字有點怪異外,使用起來臨時表同普通表沒有任何區別.
用完後,不要忘記Drop掉
表變量放在內存中,體積小效率高,儘量使用.用Declare創建.
declare @user table(id int,lastname varchar(50),age int)
(3) 系統變量
@@Rowcount : 變了多少行
@@error : 錯誤信息
(4) Case 語句,返回是一個值
有兩種:
CASE 某某表達式 When 某值1 Then 某值10
When 某值2 Then 某值20
ELSE 某值00
END
就是比較某某表達式等於某值1,2時,返回某值10,20等等. ELSE是兜底的.
CASE WHEN 某布爾表達式 THEN 某值10
When 某布爾表達式2 THEN 某值20
ELSE 某值00
END
就是布爾表達式是真,返回後面的某值10,20,都是假,返回ELSE後面的值. CASE後面要跟END表示結束
(5) Transaction
BEGIN TRANSACTTION /*開始一個Transaction*/
IF @@ERROR <> 0
ROLLBACK TRANSACTION /*如果出錯,就Rollback*/
ELSE
--Commit the transaction
COMMIT TRANSACTION /*一切正常就COMMIT*/
Transaction可以簡寫為Trans, 在上面三句Transaction後面都可以加個名字,常量或變量.如
BEGIN TRANSACTTION 某某交易名.
有一個變量叫@TransCount是用在嵌套交易中,算算目前到了第幾層的.
(6) Create Trigger格式如下
Create Trigger 某某名字
ON 某某表
FOR | AFTER | INSTEAD OF 某某事件
As
做某某觸發後該乾的事
某某事件包括: Insert,Delete, Update
(7) Create View 格式
Create View 視圖的名字 (變量1, 變量2 ...)
As
Select 語句
那個括號裏的變量1,2 可以省略.
(8)Data Type 數據類型
BINARY 每個字符佔一個字節 任何類型的數據都可存儲在這種類型的字段中。
BIT 1 個字節 Yes 和 No ,以及只包含這兩個數值之一的字段。
TINYINT 1 個字節 介於 0 到 255 之間的整型數。
MONEY 8 個字節 符號整數。
DATETIME 8 個字節 介於 100 到 9999 年的日期或時間數值。
UNIQUEIDENTIFIER 128 個位 用於遠程過程調用的唯一識別數字。
REAL 4 個字節 單精度浮點數。
FLOAT 8 個字節 雙精度浮點數。
SMALLINT 2 個字節 短整型數。
INTEGER 4 個字節 長整型數。
DECIMAL 17 個字節 精確的數字數據類型。。
TEXT 每一字符兩字節 從零到最大 2,14 千兆字節。
IMAGE 視實際需要而定 從零到最大 2,14 千兆字節。用於 OLE 對象。
CHARACTER 每一字符兩字節(參見注意) 長度從 0 到 255 個字符。
定義成TEXT也稱作(MEMO)或CHAR(也稱作有具體長度的 TEXT(n))的字段中的字符被儲存在 Unicode 表示格式。Unicode字符一律需要兩個字節存儲每一字符。