SQL Server Express 支援 XCOPY 部署:只需將 .mdf/.ldf 複製到應用程式目錄,連接字串加入 AttachDbFileName=|DataDirectory|\MyDB.mdf 即可自動附加。但實測發現跨磁碟機(非 C:)部署會失敗,錯誤訊息:「資料庫已被壓縮,無法建立,需要解壓縮」。
C:\,應用程式部署在 D:\App。AttachDbFileName=D:\App\MyDB.mdf → 拋出壓縮錯誤。C:\App → 正常附加。NETWORK SERVICE 或 Local System)寫入。NETWORK SERVICE(或服務帳號) → 勾選「修改/寫入」。DataDirectory 指向 C: 下資料夾。CREATE DATABASE ... FOR ATTACH,連接字串改用一般 Initial Catalog,不使用自動附加。Read Only=True,適用於純查詢場景。| 版本 | Driver | 連接字串關鍵差異 |
|---|---|---|
| SQL 2000 | com.microsoft.jdbc.sqlserver.SQLServerDriver | jdbc:microsoft:sqlserver://host:1433;DatabaseName=DB |
| SQL 2005+ | com.microsoft.sqlserver.jdbc.SQLServerDriver | jdbc:sqlserver://host:1433;DatabaseName=DB |
SQL 2005 JDBC 驅動支援 Statement.RETURN_GENERATED_KEYS,可統一 Oracle/MySQL/SQL Server 自增鍵取得邏輯:
PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ps.executeUpdate();
ResultSet rs = ps.getGeneratedKeys();
if (rs.next()) id = rs.getLong(1);
sqljdbc.jar 放入 tomcat/common/lib 或專案 classpathjdbc:sqlserver://掌握權限與磁碟機關係,SQL Express XCOPY 部署即可穩定落地,避免「壓縮」誤導浪費排查時間。