程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> T-SQL設計模式詳解

T-SQL設計模式詳解

編輯:關於SqlServer

一、ITERATOR(迭代)

這種模式提供一種在相似對象列表中遍歷對象的標准化方法。在SQL Server數據庫中的同義詞是游標。

DECLARE tables CURSOR
FOR select TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
FOR READ ONLY
DECLARE @table varchar(40)
OPEN tables
FETCH tables INTO @table
WHILE (@@FETCH_STATUS = 0)
BEGIN
exec sp_help @table
FETCH tables INTO @table
END
CLOSE tables
DEALLOCATE tables

注:游標的清理代碼:在CLOSE後緊跟DEALLOCATE,實際上可以只運行DEALLOCATE,並且游標也能自動關閉。但這不是最自然,也不是最常見的方法。大家可以理解為:CLOSE抵消OPEN,DEALLOCATE與DECLARE則相反,這樣可以使代碼保持對稱並且合乎邏輯。

二、INTERSECTOR(交集)

這種模式是表示集合交集的一種模板。

1、推薦方法:

select c.companyname,o.orderid

FROM customer c INNER join orders o ON c.customerid = o.customerid

2、舊式語法(不推薦使用)

select c.companyname,o.orderid
FROM customer c ,orders o
where c.customerid = o.customerid

注:實現集合交集還有許多變種方法。但是慣例方法就是方法1,方法2在實現左(右)聯接時,條件的表示及結果都可能出現問題,SQL SERVER的後續版本將會取消此種聯接方式。

三、QUALIFIER(限定)

限定數據等價於篩選查詢所返回的行數。

1、常用法:where子句限定

select city,count(*) AS NumberCity
FROM customers
where city like ’A%’
GROUP BY city

2、不自然的篩選:HAVING子句限定

select city,count(*) AS NumberCity
FROM customers
GROUP BY city
HAVING city like ’A%’

注:HAVING子句的目的是在結果集被檢索出來後再篩選查詢。實際上,SQL SERVER內在地轉換HAVING子句為where子句(兩種方法查詢的執行計劃是相同的),如果SQL SERVER不執行此優化,則針對包含大量數據行的表,因需要在篩選前從表中檢索所有行,則性能方面可能會遭受重大損失。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved