T-SQL編程概述
1.SQLServer中支持兩種類型的註釋:
(1).單行註釋 --
(2).多行註釋/* */
2. 求出選手的最高分:
declare @MaxValueID int
select @MaxValue=Max(score) from Grade where Player='選手一'
3. 臨時變量:
Declare 變量名 變量類型及寬度.
可以採用Select 語句與Set語句對臨時變量進行賦值。例如:
Declare @var varchar(12)
Set @var ‘test’
Select @var ‘test2’
例如:
Decalre @score decimall(10,2)
Select @Score=score from Grade
Print @Score
4. 如果在常量字符串中本身包括一個“’“,此時需要用兩個單引號來表達一個單引號,例如:
Declare @City varchar(30)
Set @City =’Xi’ ’An’ --在此本意是要將“Xi’An“這一個字符串賦值給@City,但由
--於這是一個常量字符串,本身要位於一對“’”內,所以在
--此需要寫兩個單引號
5. --求出去掉最高、低分後剩下的平均分(選手的最後得分)
select avg(score) from Grade where ID not in(@maxValueID,@MinValueID)
6.
(1). SET NOCOUNT:
不返回計數.
set nocount on: 關閉返回的計數器,也就是不返回受影響的行數。
SET ANSI_NULL_DFLT_OFF:
(2).SET ANSI_NULL_DFLT_OFF:
(3).SET IDENTITY_INSERT:
(4).SET ROWCOUNT:
7. 臨時表:
臨時表都是創建在TempDb系統數據庫中的。當SqlServer重新啓動時這個系統數據庫會被清空。
8. truncate,delete,drop的比較.
不同點:
(1). truncate和 delete只刪除數據不刪除表的結構(定義)
drop語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger),索引(index); 依賴於該表的存儲過程/函數將保留,但是變爲invalid狀態.
(2).delete語句是DML,這個操作會放到rollback segement中,事務提交之後才生效;如果有相應的trigger,執行的時候將被觸發.
truncate,drop是DDL, 操作立即生效,原數據不放到rollback segment中,不能回滾. 操作不觸發trigger
(3).delete語句不影響表所佔用的extent, 高水線(high watermark)保持原位置不動
顯然drop語句將表所佔用的空間全部釋放
truncate 語句缺省情況下見空間釋放到 minextents個 extent,除非使用reuse storage; truncate會將高水線復位(回到最開始).
(4).速度,一般來說: drop> truncate > delete
(5).安全性:小心使用drop 和truncate,尤其沒有備份的時候.否則哭都來不及
使用上,想刪除部分數據行用delete,注意帶上where子句. 回滾段要足夠大.
想刪除表,當然用drop
想保留表而將所有數據刪除. 如果和事務無關,用truncate即可. 如果和事務有關,或者想觸發trigger,還是用delete.
如果是整理表內部的碎片,可以用truncate跟上reuse stroage,再重新導入/插入數據