1使用WITH ROLLUP來彙總數據
結合使用WITH ROLLUP和GROUP BY子句中的列的次序來增加層次化的數據彙總,WITH ROLLUP會對應每一個細項的分給進行一次彙總統計。如下條語句:
select CLPAIssueUserID,CLPADeposeJudge,COUNT(*) from CLPatientAccount group by CLPAIssueUserID,CLPADeposeJudge with rollup
2 插入默認值
插入數據時使用默認值
INSERT INTO TABLE VALUES(DEFAULT,...)
3顯示的向一個IDENTITY列插入值
要顯示的把一個數字值插入到一個具有IDENTITY屬性的列中,必須使用SET IDENTITY_INSERT命令。如下:
打開插入 SET IDENTITY_INSERT TableA ON
插入後關閉 SET IDENTITY_INSERT TableA OFF
4 使用INSERT...SELECT語句插入行
例:
insert into test select '3','c','2','200'
或
Insert into test select * from test1
4 根據FROM 和 WHERE子句更新行
UPDATE ShoppingCartItem
SET Quantity=2
MoidfyDate=GetDate()
From ShoppingCartItem c
INNER JOIN Product p
ON C.productid=p.productid
Where p.name='steven' and c.Qutity>2
其實FROM後面的子句只是爲了過濾數據
5 TRUNCATE TABLE
TRUNCATE TABLE語句和DELETE語句差不多用於從表中刪除行。TRUNCATE TABLE刪除行比DELETE快,因爲它記錄很少的日誌。和DELETE不同的是,TRUNCATE TABLE必須刪除表中的所有行。
儘管TRUNCATE TABLE 能更快的刪除行,但是如果表中的列具有外鍵約束,或者表使用事務複製或合複製發佈,或者表參與了一個索引的視圖則不能使用TRUNCATE TABLE。還要記住,如果有IDENTITY列,列會被重置爲列定義的種子值。
6 分塊刪除行。
使用 DELETE TOP(n) 來實現分塊刪除行。如:
while(select COUNT(*) from DSDrugFinance)>0
begin
delete top(10) from DSDrugFinance
End
這種分塊的方法也能夠用於INSERT 和UPDATE,
INSERT TOP(100) PLUserr set col1=''
...
UPDATE TOP(25) table set column='...'
...
7 事務
DECLARE @Error int
BEGIN TRANSACTION
INSERT INTO test VALUES ('','',DEFAULT,'')
SET @Error=@@ERROR
IF(@Error<>0) GOTO Error_Handel
COMMIT TRANSACTION
Error_Handel:
if @Error<>0
BEGIN
ROLLBACK TRANSACTION
END
對要做的業務處理事務操作的時間儘可能的短。保持事務打開會讓資源在很長一段時間處於鎖定狀態,這樣會阻塞其他用戶進行操作或讀取數據
最小化由事務鎖定資源。
在事務執行SELECT語句會在關聯表上加鎖,這樣會導致其他用戶/會話不能執行操作或讀取數據
不要開啓一個需要在事務內等待用戶或外部反饋的事務。
8 創建計算列
在CREATE TABLE或ALTER TABLE中能夠從獨立的或者基於列的計算繼承。
ALTER TABLE Production
ADD CostPerUnit AS (ActualCost/Quantity)
計算列不會保存在數據庫中,加上關鍵字PEERSISTED後,計算列中的數據可以存儲在數據庫中
ALTER TABLE Production
ADD CostPerUnit AS ((ActualCost/Quantity) PERSISTED)
9 一個表能有多個外鍵,並且每一個外鍵能基於一個或者引用超過一列(引用組合主鍵或者唯一索引)的多重(組合)鍵。而且,儘管照外鍵和主鍵的列名不需要一致,但是主鍵/唯一列必須要有一致的數據類型。另外,你不雙腿在跨數據庫或者服務器的表上定義外鍵約束
10 創建遞歸外鍵引用
表中的外鍵列能定義成引用它自己的主鍵/唯一鍵。這個技術通常用於表現遞歸關係。
--創建遞歸外鍵引用
CREATE TABLE Company
(
CompanyID int NOT null primary key ,
ParentCompanyID int null,
CompanyName varchar(25) not null,
CONSTRAINT FK_Company_Company
FOREIGN KEY(ParentCompanyID)
REFERENCES Company(CompanyID)
)
GO
INSERT INTO Company
(CompanyID,CompanyName)
VALUES
(
1,'ANTA'
)
--插入成功
INSERT INTO Company
(CompanyID,ParentCompanyID,CompanyName)
VALUES
(
2,1,'ERKE'
)
--插入失敗,因爲CompanyID爲的數據
INSERT INTO Company
(CompanyID,ParentCompanyID,CompanyName)
VALUES
(
3,8,'PEAK'
)