容易忽略的SQL語句(二)

 

1使用WITH ROLLUP來彙總數據

結合使用WITH ROLLUPGROUP BY子句中的列的次序來增加層次化的數據彙總,WITH ROLLUP會對應每一個細項的分給進行一次彙總統計。如下條語句:

select CLPAIssueUserID,CLPADeposeJudge,COUNT(*) from CLPatientAccount group by CLPAIssueUserID,CLPADeposeJudge with rollup

插入默認值

  插入數據時使用默認值

INSERT INTO TABLE VALUES(DEFAULT,...)

3顯示的向一個IDENTITY列插入值

要顯示的把一個數字值插入到一個具有IDENTITY屬性的列中,必須使用SET IDENTITY_INSERT命令。如下:

打開插入  SET   IDENTITY_INSERT  TableA  ON

插入後關閉  SET   IDENTITY_INSERT  TableA  OFF

使用INSERT...SELECT語句插入行

例:

insert into test select '3','c','2','200'

Insert into test select * from test1

根據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列,列會被重置爲列定義的種子值。

分塊刪除行。

使用 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='...'

...

事務

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語句會在關聯表上加鎖,這樣會導致其他用戶/會話不能執行操作或讀取數據

不要開啓一個需要在事務內等待用戶或外部反饋的事務。

創建計算列

CREATE TABLEALTER TABLE中能夠從獨立的或者基於列的計算繼承。

ALTER TABLE Production

ADD CostPerUnit AS (ActualCost/Quantity)

計算列不會保存在數據庫中,加上關鍵字PEERSISTED後,計算列中的數據可以存儲在數據庫中

ALTER TABLE Production

ADD CostPerUnit AS ((ActualCost/Quantity) PERSISTED

一個表能有多個外鍵,並且每一個外鍵能基於一個或者引用超過一列(引用組合主鍵或者唯一索引)的多重(組合)鍵。而且,儘管照外鍵和主鍵的列名不需要一致,但是主鍵/唯一列必須要有一致的數據類型。另外,你不雙腿在跨數據庫或者服務器的表上定義外鍵約束

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'

)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章