Microsoft_SQL_Server_Express_LocalDB

**Microsoft SQL Server Express** 是微軟公司所開發的關聯式資料庫產品 SQL Server 的免費下載版本，可自由下載、分發（需經註冊）及使用。這個版本的設計是專門為嵌入式系統或較小型的程式而設計。本產品可遡源至過往隨同 SQL Server 2000 軟體分發的 Microsoft Database Engine (MSDE)，用以讓程式開發者在其測試其程式時建立一個系統需求較低的測試環境。自 SQL Server 2005 開始，本產品改用現時的名稱。

它繼承了多數的 SQL Server 功能與特性，像是 Transact-SQL、SQL CLR 等，相當適合使用在小型的網站，或者是小型的桌上型應用程式，它也可以和 SQL Server 整合，作為資料庫複製（Replication）的訂閱端。

## 功能與限制

SQL Server Express 提供了付費的完整版本的多項功能，然而其技術限制使之無法適用於大規模的部署。這兩個版本的差異在於：

* 資料庫的大小限制：對 SQL Server 2008 R2 Express、SQL Server 2012 Express、SQL Server 2014 Express、SQL Server 2016 Express、SQL Server 2019 Express 單個資料庫的大小限制最大為 10 GB；而在較早期的 SQL Server 2005 Express 和 SQL Server 2008 Express 上，單個資料庫的大小限制最大為 4 GB。即使如此，亦已比最初 MSDE 版本的 2 GB 要多。而且這個大小的限制只有在資料檔案上，交易記錄檔則不受此限。
* 沒有 SQL Agent 服務：若要做排程服務必須自己寫程式。
* 硬體方面的人為限制：
  * 允許在多核心的電腦上使用，但只會使用一個 CPU 核心來運算。這在具有多核心 CPU 的電腦上會造成浪費。MSDE 最高可以支援二顆 CPU 核心。
  * 可使用的記憶體量最高只有 1GB。而全功能標準版至少使用 4GB 記憶體。

MSDE 有一個並行工作負債監視器並限制在少量使用者並行存取，SQL Server Express 沒有這個並行限制。

SQL Server Express 包括了幾個資料庫管理的圖形化使用者介面工具：

* SQL Server Management Studio - since 2012 SP1; before that, only a stripped-down version called _SQL Server Management Studio Express_ is provided
* SQL Server Configuration Manager
* SQL Server Surface Area Configuration tool
* SQL Server Business Intelligence Development Studio

MSDE 沒有管理介面

SQL Server Express 不包括全功能標準版的幾個工具：

* Analysis Services
* Integration Services
* Notification Services

SQL Server Express 的各版本是可以遠端連接的，但需要使用者做一定的組態。

## 過往版本

* 並不包括 Windows Server 2016 "Essentials" Edition

### 安裝版本

SQL Server Express 2017 或 2019，SQL Server Express 有三款安裝版本：

* 標準的 SQL Server Express，或稱 Express Core： SQL Server Engine only
* 高級版本（with Advanced Services），或稱 Express Advanced：還包括有 Reporting services 及全文檢索（Full Text Service），在舊版本均包括在標準安裝版本內。
* LocalDB：比標準版本更輕便的資料庫。具有全部的編程特性，但在使用者模式下執行。只能在本地連接資料庫。從 SQL Server 2012 版開始有了 LocalDB。在 Visual Studio 2019 安裝中，帶有 SQL Server Express 2016 LocalDB

## 資料庫管理工具

* Navicat for SQL Server（頁面存檔備份，存於網際網路檔案館） 是一套付費軟體，專為 Microsoft SQL Server 設計的強大資料庫管理及開發工具。它可以用於任何版本的 SQL Server 資料庫（包括 SQL Server Express），並支援大部份 SQL Server 的功能，包括觸發器、索引、檢視等。

## 到伺服器的連接

SQL Server 包括 Express 版本，有 3 種到資料庫伺服器的連接（connection）方式：

* 共享記憶體：僅限於本地存取
* 命名管道：
* TCP/IP 通信：

其中後兩種需要在 SQL Server Configuration Manager 軟體中，SQL Server Network Configuration 下的「Protocols for SQLEXPRESS」，把 Nameed Pipes 與 TCP/IP 手工置為 Enable。對於第三種，還需要在上述的組態時，在 TCP/IP Properties 的 IP Addresses 中把 IPALL 的「TCP Port」設為 1433.

## 工具

* SQL Server Management Studio Express，可用來管理 SQL Server Express 實體。
* SQL Server Reporting Service Express，簡易版的 SQL Server Reporting Service。
* SQL Server Configuration Manager，可用來管理 SQL Server Express 的連線組態與服務。
* Business Intelligence Development Studio Express，可用來開發 Reporting Service Express 的報表。
* 命令列工具 sqlcmd，如下：

```
$sqlcmd -S thisisaserver.com -U username
Password:
1> SELECT name FROM SYSOBJECTS WHERE xtype = 'U'
2> GO
name
--------
EquitySecMstr
(1 rows affected)
1>
```

## LocalDB

LocalDB 的全稱是 Microsoft SQL Server Express LocalDB。

### 安裝

從 Microsoft 下載的 SqlLocalDB.msi 約 54MB。也可以使用 Microsoft SQL Server Express 的安裝程式，在第一頁選擇第 3 項「Download Media」，隨後在下一頁選擇第 3 項「localDB (54MB)」即可下載。

### 使用

命令列工具 SqlLocalDB，用於建立和管理 LocalDB 的實例。

系統資料庫檔案儲存於本地 AppData 路徑下，通常為 `C:\Users\<user>\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\`。

LocalDB 是在 Windows 當前使用者的使用者行程中執行。而 SQL Server Express 是作為 Windows Service 執行。所以，LocalDB 的資料儲存是 Windows 使用者私有的。在 Visual Studio 啟動 IIS Express 也是當前使用者的使用者行程執行，所以可以存取 LocalDB。

把私有的資料儲存變為共享實例。例如，原儲存為「(localdb)\v11.0」：

```
sqllocaldb share v11.0 IIS_DB
```

現在為公共名字 IIS\_DB。該電腦所有使用者均可以用「(localdb)\.\IIS\_DB」存取該實例。注意，名字中的字首「\.」表示這是共享實例名字。即其儲存的檔案的路徑不會放在特定使用者的 documents 目錄中。連接字串可為：

```
Data Source=(localdb)\.\IIS_DB;Initial Catalog=OldFashionedDB;Integrated Security=True
```

在 Visual Studio 中通過 SQL Server Object Explorer 連接上述 localDB 實例，在 query 窗口執行下述指令碼可以授予「」帳號資料實例的管理員權限：

```
create login [IIS APPPOOL\ASP.NET v4.0] from windows;
exec sp_addsrvrolemember N'IIS APPPOOL\ASP.NET v4.0', sysadmin
```

### SQLCMD 使用的連接字串

`C:\>sqlcmd -S "(localdb)\MyInstance"` 就可以在互動環境下執行查詢：

### Microsoft SQL Server Management Studio 連接 LocalDB

Server Name 使用 `(localdb)\MyInstance`

## 編程介面

### ADO.Net

對於較高版本，如 SQL Server Express 大於版本 2010 的，可以通過在 Visual Studio，依次點擊「視圖」(選單欄)->「伺服器檔案總管（Server Explorer）」，進入「伺服器檔案總管」窗口。右鍵點擊「資料連接（Data Connection）」，在彈出的上下文選單中選擇「添加連接（Add Connection）」，在彈出的窗口中將 Data Source 選擇為 Microsoft SQL Server，「伺服器名」設定為 (LocalDb)\MSSQLLocalDB，附加伺服器檔案為具體的 mdf 檔案並點擊確定。此時，通過 Microsoft SQL Server（SQL Client）方式存取指定的 mdf 檔案。

對於較低版本，如 SQL Server Express 2005 的 mdf 檔案，可以直接用如下 connection string 打開存取（可能需要 administrator 權限）：

### Python

需要安裝 pymssql 包

## 參考資料

## 參看

* SQL Server Management Studio（SSMS）

## 外部連結

* Microsoft SQL Server Express downloads（頁面存檔備份，存於網際網路檔案館）
* Microsoft SQL Server Express documentation（頁面存檔備份，存於網際網路檔案館）
* SQL Server 2012 Comparison of features by edition（頁面存檔備份，存於網際網路檔案館）
* SQL Server Express WebLog（頁面存檔備份，存於網際網路檔案館）
* MSDN 上的支援群組
* Hardware and Software Requirements for Installing SQL Server 2012（頁面存檔備份，存於網際網路檔案館）
* Hardware and Software Requirements for Installing SQL Server 2014（頁面存檔備份，存於網際網路檔案館）
* SQL Server Express LocalDB, from Microsoft Docs （頁面存檔備份，存於網際網路檔案館）