Mssql

**Microsoft SQL Server**(微軟結構化查詢語言伺服器) 是由美國微軟公司所推出的關聯式資料庫解決方案，最新的版本是 SQL Server 2022，已在美國時間 2022 年 11 月 16 日發佈。

資料庫的內建語言原本是採用美國標準局和國際標準組織所定義的 SQL 語言，但是微軟公司對它進行了部分擴充而成為作業用 SQL。

幾個初始版本適用於中小企業的資料庫管理，但是近年來它的應用範圍有所擴充，已經觸及到大型、跨國企業的資料庫管理。

## 歷史淵源

SQL Server 一開始並不是微軟自己研發的產品，而是當時為了要和 IBM 競爭時，與 Sybase 合作所產生的，其最早的發展者是 Sybase，同時微軟也和 Sybase 合作過 SQL Server 4.2 版本的研發，微軟亦將 SQL Server 4.2 移植到 Windows NT（當時為 3.1 版），在與 Sybase 終止合作關係後，自力開發出 SQL Server 6.0 版，往後的 SQL Server 即均由微軟自行研發。

在與微軟終止合作關係後，Sybase 在 Windows NT 上的資料庫產品原本稱為 Sybase SQL Server，後來改為現在的 Sybase Adaptive Server Enterprise。

## 版本演進

### SQL Server 1.0 & 1.1

SQL Server 的發源最早要回到 1986 年，當時微軟已和 IBM 合作開發 OS/2（當時為了要繼承 MS-DOS）作業系統，但由於缺乏資料庫的管理工具，而 IBM 也打算將其資料庫工具放到 OS/2 中銷售之下，微軟和 Sybase 合作，將 Sybase 所開發的資料庫產品納入微軟所研發的 OS/2 中，並在獲得 Ashton-Tate 的支援下，第一個掛微軟名稱的資料庫伺服器 Ashton-Tate/Microsoft SQL Server 1.0 於 1989 年上市。

不過在 1989-1990 年間，由於 Ashton-Tate 的 dBase IV 計畫不順，讓微軟原本打算由 dBase IV 來開發 SQL Server 應用程式的計畫變得無法實現，因此微軟終止與 Ashton-Tate 的合約，真正掛微軟單一品牌的 Microsoft SQL Server 1.1 於 1990 年中出貨。同一年，微軟為 SQL Server 建立技術支援團隊，並於 1991 年初起陸續取得 Sybase 的授權，有權利可以檢視與修改 SQL Server 的原始程式碼。雖然主控權仍在 Sybase，微軟的任何修正都需要由 Sybase 檢視並且同意後才可以執行，但這個里程碑對日後微軟開始發展自己的資料庫伺服器時，在資料庫引擎的發展上，提供了相當重要的基礎。

然而在 OS/2 的銷售狀況不佳下，SQL Server 1.0/1.1/1.11（後續發布的 1.1 升級版）的銷售狀況都不佳。

### SQL Server 4.2

1992 年，由 Sybase 與微軟共同發表 SQL Server 4.2 版，微軟在此版本中的貢獻為：

1. 與 Sybase 合作，將 Sybase 的 SQL Server 核心程式碼移植到 OS/2 中。
2. 提供 MS-DOS，Windows 以及 OS/2 的使用者端函式庫（Client Library）。
3. 開發部份管理工具。

不過 SQL Server 4.2 一開始並不是以 32 位元為基礎，而是以 16 位元為基礎開發。

### SQL Server for Windows NT

在 1992 年時，由於市場上對 32 位元作業系統的需求逐漸升高，但 IBM 的 OS/2 2.0 卻又沒有如期在時程內完成，SQL Server 的開發小組利用 OS/2 的 32 位元介面移植 SQL Server 到 OS/2 2.0（當時為 beta）測試時，發現 32 位元並沒有如預期來的有效率，另外一方面，微軟內部當時也正在開發新一代作業系統（即 Windows NT），使得 SQL Server 團隊決定要終止對 SQL Server for OS/2 的發展，同時挹注全力開發出支援 Windows NT 的版本，代號為「SQL NT」。

在 SQL NT 中，微軟將 SQL Server 4.2 的核心程式碼，以 Win32 API 翻寫，並於 1993 年 Windows NT 3.1 出貨後 30 天，完成 SQL Server for Windows NT（4.2）的開發工作，在市場上銷售。

SQL Server 4.2 是第一個 Windows NT 上的 SQL Server，也是第一個出現在微軟認證考試中的 SQL Server 產品。

### SQL Server 6.0

在微軟利用 SQL Server 4.2 for Windows NT 賺取高額營收（自 SQL Server 4.2 for Windows NT 發行起九個月內，微軟 SQL Server 帶來的營收已成長兩倍）時，對於其合作夥伴 Sybase 而言，微軟的 SQL Server 已不被 Sybase 所重視（Sybase 自己要關注在自家的產品線），並且因為 SQL Server 的權利在 Sybase 手中（1987 年與 Sybase 簽訂的合約），微軟無法在 SQL Server 中自行添加與修改功能。

微軟自 SQL Server 1.0 到 4.2 for Windows NT，數個版本的歷程中，其 SQL Server 團隊已經大幅成長，但受限於與 Sybase 的合約，微軟即使有新研發的 Windows NT 功能，也無法加入 SQL Server 中，因此於 1994 年 4 月 12 日，微軟和 Sybase 正式終止了合作關係（並向 Sybase 買下了 Windows 版本的 SQL Server 程式碼著作權），微軟獲得了對 SQL Server 程式碼的完全控制權，不過挑戰也接踵而來 ——Sybase 即將於年底發表 System 10 for Windows NT，微軟必須要提出新的版本計畫，以防止 Sybase 將原本的微軟客戶搶走，「SQL 95」計畫這樣產生了。

SQL 95 的命名是仿自 Windows 95，也就是新一代的資料庫伺服器軟體，此版本於 1994 年 10 月發布第一個 beta 版本，並且後續又發布了不同的 beta 修正版，其中較引人注目的是首次出現在 SQL Server 中的「複製」（Replication）功能，複製功能所需要的「可捲動式資料游標」（scrollable-cursor），以及其管理工具（代號為「Starfighter」，即 SQL Enterprise Manager）。

SQL Server 6.0（SQL 95）於 1995 年 6 月 14 日完成並進入 RTM（released to manufacturing），對於 SQL Server 團隊以及微軟來說，SQL Server 6.0 是重要的里程碑，因為此版本是完全由微軟自行開發，未假手 Sybase 或其他廠商，因此 SQL Server 6.0 的發行，讓微軟的資料庫研發能力正式被外界認可。

SQL Server 6.5 發布於 1996 年，約於 SQL Server 6.0 發表後十個月後發行。

### SQL Server 7.0

當微軟正在發展 SQL Server 6.5 時，已經另外有一個團隊正在發展新的資料庫，由於微軟計畫要能夠讓此種資料庫引擎能夠具有可向上發展，亦可以縮小到 PC 或筆記型電腦中，因此資料庫的核心必須要重新撰寫，這就會涉及資料結構的改變，為了要讓資料庫的升級能夠確保其穩定性，微軟在 1997 年特別邀請 1000 個組織備份資料庫，交由開發小組進行升級，並且在升級過程中找出可能的失敗原因。同時在 1998 年 2 月起，微軟與 ISV 合作發展運行於 SQL Server 7.0 的軟體，除了保持相容性外，也讓 ISV 能夠特別為 SQL Server 7.0 的特性撰寫程式。

在同一時間，OLE DB 的技術，以及很多人熟知的 MSDE（Microsoft Data Engine）也在研發中，後來 OLE DB 成為 Windows 平台上資料存取的顯學，其上的 ADO 更獲得多數開發人員的採用。而 MSDE 也做為 Microsoft Access 資料庫外的另一種單機資料庫的選擇。

SQL Server 7.0 最終凍結版本為 7.00.623.07，於 1998 年 12 月進入 RTM。

### SQL Server 2000

原本 SQL Server 2000 隻是 SQL Server 7.0 的一個小改款，代號為「Shiloh」，版本號碼為 7.5；真正要做大翻修的 SQL Server 版本，代號則是「Yukon」。Shiloh 在開發過程中，因為要加入的功能並不多，只是要完成在 7.0 版中沒有寫完的功能，並且預期可能升級的客戶不多，因此當時在微軟內部，只是把 Shiloh 視為是一個「Super Service Pack」而已，有如 SQL Server 6.0 和 6.5 的角色。

不過因為幾個因素，讓 SQL Server 7.5 擺脫「Super Service Pack」的束縛：

1. SQL Server 7.0 Service Pack 2 已經發表，無需再開發一個 Service Pack。
2. 來自客戶對於效能以及在資料倉儲中對星狀拓樸支援的分割檢視與最佳化的要求。
3. 來自於競爭者 Oracle 的壓力。

在微軟決定要把時程展延到 18 個月（完整的軟體週期）時，也開始為 SQL Server 7.5 加入新的功能，版本代碼升級到 8.0（最終版本為 8.0.194），同時因應當時 Windows 2000 的計畫，Microsoft BackOffice 也命名為 BackOffice 2000，故 SQL Server 8.0 也改名為 SQL Server 2000。

SQL Server 2000 於 2000 年 8 月 6 日完成，並於 2000 年 8 月 9 日進入 RTM 狀態。

SQL Server 2000 可說是微軟資料庫伺服器中「生命期最久」（自 2000 年 8 月 9 日 RTM 開始到 2005 年 11 月 SQL Server 2005 上市為止，長達五年又三個月），而且後續添加的新功能相當多，Service Pack 也最多（最後的 Service Pack 為 SP4）的版本，諸如：

1. SQL Server 2000 Notification Services
2. SQL Server 2000 Reporting Services
3. SQL Server 2000 Web Administration
4. SQL Server 2000 XML（SQLXML）

同時，它也是第一個出現在 Windows CE 上的 SQL Server。

### SQL Server 2005

SQL Server 2005（代號為「Yukon」）在千呼萬喚下終於在 2005 年 11 月，與 Visual Studio 2005 一起發表，在 SQL Server 2005 的研發過程中，其實並不順利。

SQL Server「Yukon」在 2003 年底左右就發表了 Beta 1，雖然已經有資料庫以及部份的新功能，但由於太多的除錯碼（當時 SQL Server 作為 CLR Hosting 基底的.NET Framework 2.0 也正在研發中），讓執行速度變得很慢。一直到 2004 年中左右才釋出 Beta 2，此版本的穩定度就高些，在 Beta 2 和 Beta 3 之間，每一至三個月左右就會釋出一個測試版本，由於並不是達到特定功能或特定時程的測試版，因此都以「CTP」（Community Technology Preview）的方式發行（現在廣泛運用於各微軟的產品測試版本中），Beta 2 和 Beta 3 之間相距幾乎一年，2005 年 6 月才發布 Beta 3，此時整個環境才大致底定下來。

SQL Server 2005 具代表性的新功能有：

1. SQL Server 管理工具的改變，SQL Server Management Studio（SSMS）取代 SQL Server Enterprise Manager。
2. 將商業智慧型的開發功能由 SQL Server Enterprise Manager 切出，加入 Visual Studio 中，即 Business Intelligence Development Studio（BIDS）。
3. 新增多種 Transact-SQL 指令，例如 PIVOT/UNPIVOT，Common Table Expression（CTE）等等。
4. 強化 XML 的處理能力，並新增原生的 XML 資料型別，以及支援原生 XML 資料型別的 XML 查詢運算子。
5. 新增 varchar（max），nvarchar（max），varbinary（max）型資料型別，用來取代 text、ntext 與 image 型別。
6. 將.NET Framework 功能植入資料庫引擎中（SQL CLR），讓 VB.NET 和 C# 可以開發 SQL Server Stored Procedure，Function，User-Defined Type 等。
7. 原本的 DTS 改名為 SQL Server Integration Services，強化其 ETL（Extract, Transform and Load）功能。
8. Data Mining 新增到八種演算法。
9. 資料庫引擎的安全性功能大幅強化，引入主體（Principal），結構（Schema）以及資料層次的加解密。
10. 對於資料結構變更的觸發程式支援（DDL Trigger）。

除了伺服器版本的改變外，MSDE 也正式由 SQL Server Express 所接替，作為 SQL Server 2005 核心的微型資料庫伺服器，並且在隨後的版本，也添加了 SQL Server Express Reporting Service 以及 SQL Server Management Studio Express 等小工具，讓 SQL Server Express 比 MSDE 更好管理。

### SQL Server 2008

SQL Server 2008 在 2008 年 8 月 6 日正式發表，並且同時發布 SQL Server 2008 Express 版本，研發代號為「Katmai」，作為 SQL Server 2005 的功能強化版本，其主要的新功能與特色有：

* 以原則為主（Policy-Based）的管理基礎架構。
* 與 Windows Server 2008、Windows Vista 的 Data Collector 技術整合的 Performance Data Collection。
* 可以經由管理者設定以調整執行資源的資源調節器（Resource Governer）。
* 可預測的查詢效能。
* 資料壓縮能力。
* DDL（資料定義語言）稽核能力。
* 透通式資料加密（Transparent Data Encryption）
* 記錄檔資料流壓縮（Log Stream Compression）
* ADO.NET Object Services 的直接支援，這代表 SQL Server 2008 可支援 LINQ 和 ADO.NET Entity Framework。
* 原生的 DATE 和 TIME 分割的資料型別，並且支援時間位移的 DATETIMEOFFSET 和更精確的 DATETIME2 資料型別。
* FILESTREAM 資料型別：將大型二進位資料存到 NTFS 檔案系統中（即不直接存在資料庫中）。
* 稀疏欄位（Sparse Column）的支援，可節省因為 NULL 值所佔據的儲存空間。
* 空間資料型別集，包含 geometry（平面或 Euclidean（平面地球）資料）以及 geography（橢圓體（圓形地球）資料），分別可儲存平面和立面型的資料，有助於 GIS 型系統的開發。
* 變更資料收集與捕捉（Change Data Capture）。
* 寬資料表（Wide table），可以容納最高 30,000 個欄位，但必須要配合 Sparse 欄位使用。
* hierarchyid 資料類型，可以允許儲存階層化的資料。
* MERGE 語句，可根據與來源資料表聯結的結果，在目標資料表上執行插入、更新或刪除作業，其功能與 ADO.NET 中的 DataSet.Merge () 方法類似。
* Report Server 應用程式嵌入能力。
* Reporting Service 可支援表單驗證。
* 預測分析能力（SSAS）。
* 資料表型參數與變數，可以在變數或參數中使用 table 的型別。

SQL Server 2008 比起以往版本存在以下優勢：
（1）保護資料庫查詢
（2）在伺服器的管理操作上花費更少的時間
（3）增加應用程式穩定性
（4）系統執行效能最佳化與預測功能

### SQL Server 2008 R2

SQL Server 2008 R2 在 2010 年 4 月 21 日正式發表，並且同時發布 SQL Server 2008 R2 Express 版

### SQL Server 2012

SQL Server 2012 在 2012 年 3 月 6 日正式發表。提供標準、企業、智慧型商務三種版本。

### SQL Server 2014

SQL Server 2014 在 2014 年 4 月 1 日正式發表。

### Windows Azure SQL Database

SQL Azure 是微軟 Windows Azure Platform 上的雲端關聯式資料庫服務（Database as a Service），早期被稱為 SQL Server Data Services 或 SQL Services，應用程式可以直接利用 TDS over SSL 來存取 SQL Azure 中的資料庫，同時 SQL Azure 基於 Windows Azure 平台之上，亦具有與 Windows Azure 相同的高可用性（High Availability），高延展性 (High Extensibility) 以及高擴充性（High Scalability）。

在 Windows Azure 的 2012 年度 Spring Release 時，進行了品牌重整，將 SQL Azure 納入 Windows Azure 產品線下，改名為 Windows Azure SQL Database。

### SQL Server 2016

已在 2016 年 6 月 1 日發佈。

### SQL Server 2017

已在美國時間 2017 年 10 月 2 日發佈。

### SQL Server on Linux

微軟公司於 2016 年 3 月 8 日釋出封閉預覽測試版的 SQL Server on Linux，預定於 2017 年上市。此為 SQL Server 推出 27 年以來，再次支援 Windows 以外的作業系統。

2017 年 10 月，SQL Server 2017 on Linux 作爲 SQL Server 2017 的多操作系統版本已發佈。

### SQL Server 2019

已在 2019 年 11 月 4 日發佈。

## 架構

## 服務

## 資料庫管理工具

* SQL Server Management Studio

　
: SQL Server 預設的資料庫管理工具，隨著 SQL Server 安裝時勾選使用者端的選項而安裝。
* Navicat for SQL Server

　
: 是一套專為 Microsoft SQL Server 設計的強大資料庫管理及開發工具。它可以用於任何版本的 SQL Server 資料庫，並支援大部份 SQL Server 的功能，包括觸發器、索引、檢視等。斷點。

## 對編程的支援

* 以 T-SQL 語法寫 SQL 預存程序或 SQL 預存函式。
* ODBC 及 OLE DB 支援。
* SQL Server Native Client，SQL Server 的原生客戶端組件，也是 ODBC 和 OLE DB 驅動程式的提供者。SQL Server 2012 起廢除。
* 自 SQL Server 2005 以後，以 SQL CLR 支援使用 C# 或 VB.NET 撰寫外掛的 DLL 檔，來擴充原本 TSQL 語法所欠缺的功能。
* 以 **sqlcmd** 來提供在批次檔執行 SQL 命令的功能。
* 在 ASP，可以經由 ADO 對於 SQL Server 進行存取。
* 在 ASP.NET，可以經由 ADO.NET 對於 SQL Server 進行存取。
* 在 Java 或 JSP，可以經由 JDBC 對於 SQL Server 進行存取。
* 在 PHP，可以經由 PDO 對於 SQL Server 進行存取。

## 版本

SQL Server 依功能的不同，分成下列的版本：

* SQL Server Enterprise Edition：具有企業級功能的 SQL Server 版本，適用於大型企業以及大型資料庫或資料倉儲的伺服器版本。
* SQL Server Standard Edition：具有標準功能的 SQL Server 版本，適用於一般企業的伺服器版本。
* SQL Server Workgroup Edition：自 SQL Server 2000 開始才有的版本，專為工作群組或部門所設計，適用於較小規模的組織。
* SQL Server Web Edition：自 SQL Server 2008 開始才有的版本，專為 Web 伺服器與 Web Hosting 所設計，功能上較 Workgroup Edition 少一些。
* SQL Server Express Edition：免費的 SQL Server 版本，適用於小型應用程式或是單機型應用程式，但在功能上有設限，如只能使用一顆處理器，以及最大資料庫大小為 4GB 等。請見 SQL Server Express。
  * SQL Server 2008 Express 下載位址
    * SQL Server 2008 Express （頁面存檔備份，存於網際網路檔案館）
    * SQL Server 2008 Express and Advanced Services （頁面存檔備份，存於網際網路檔案館）
    * SQL Server 2008 Express with Tools （頁面存檔備份，存於網際網路檔案館）
  * MSDE 下載位址
    * Microsoft SQL Server 2000 Desktop Engine (MSDE 2000) Release A （頁面存檔備份，存於網際網路檔案館）
  * SQL Server 2005 Express 下載位址
    * Microsoft SQL Server 2005 Express Edition with Advanced Services Service Pack 2 （頁面存檔備份，存於網際網路檔案館）
    * Microsoft SQL Server 2005 Express Edition Toolkit Service Pack 2
    * Microsoft SQL Server Management Studio Express Service Pack 2 （頁面存檔備份，存於網際網路檔案館）
    * Microsoft SQL Server 2005 Express Edition Service Pack 2
    * SQL Server Compact Edition：免費的 SQL Server 版本，專用於行動裝置以及 Windows CE 作業系統。
* SQL Server Developer Edition，具有與 SQL Server Enterprise Edition 相同的功能，但只授權在開發應用程式與測試之用，也正因為如此，SQL Server Developer Edition 的價格只有 Enterprise Edition 約千分之一而已。
  * SQL Server 2014 Developer Edition: 對 Visual Studio Dev Essentials 會員免費下載

## 參考文獻

### 參照

### 書籍

* Kalen Delaney (2001). "Inside SQL Server 2000". _Microsoft Press_. ISBN 0-7356-0998-5.
* Scalability Experts (2005). "SQL Server 2005 : Changing the Paradigm". _Sams_ ISBN 0-672-32778-3
* Thomas Rizzo, Adam Machanic, et al (2005). "Pro SQL Server 2005". _Apress_ ISBN 1-59059-477-0
* Fernando Guerrero, Carlos Eduardo Rojas (2001). "Sql Server Programming By Example", _QUE_ ISBN 0-7897-2449-9
* Tony Bain, et al (2004). "Beginning SQL Server 2000 DBA From Novice to Professional", _aPress_ ISBN 1-59059-293-X
* Brian Knight, Kathi Kellenberger, et al (2006). "Professional SQL Server 2005 Integration Services", _Wrox_ ISBN 0-7645-8435-9
* Buck Woody (2005). "Administrator's Guide to SQL Server 2005". _Pearson Education_ ISBN 0-321-39797-5
* Mike Gunderloy, Joseph L. Jorden, David W. Tschanz (2006). "Mastering SQL Server 2005", _Sybex_, ISBN 0-7821-4380-6

## 外部連結

* SQL Server 技術檔案，微軟官網
* SQL Server 2005 知識庫 / 程式設計俱樂部 （頁面存檔備份，存於網際網路檔案館）
* 搜尋產品週期
* 高效率 SQL Server,（英文）
* 早期版本的開發團隊版本歷史 （頁面存檔備份，存於網際網路檔案館）,（英文）
* SQL Server Worldwide Users Group Help Site （頁面存檔備份，存於網際網路檔案館）,（英文）
* WinFS Team Blog about WinFS rollup into Katmai and other various products （頁面存檔備份，存於網際網路檔案館）,（英文）