在 SQL Server 環境下,若需複製資料表結構但不複製資料,許多開發者習慣透過 Enterprise Manager 圖形介面操作,步驟繁瑣。其實只要一行 SELECT INTO 敘述即可輕鬆完成,本文說明其用法與注意事項。
SELECT * INTO NewTable FROM SourceTable WHERE 1 = 0
WHERE 1 = 0 條件永遠為假,查詢結果為 0 筆資料。SELECT INTO 會根據查詢結果的欄位定義,自動建立 NewTable 並複製欄位名稱、資料類型、可空性等結構屬性。資料庫必須啟用 SELECT INTO 功能,執行以下指令設定:
EXEC sp_dboption 'DatabaseName', 'select into/bulkcopy', 'true'
或在 SSMS 中:資料庫屬性 → 選項 → 允許 SELECT INTO/大量複製 = True。
-- 將 Orders 表結構複製為 OrderHistory
SELECT * INTO OrderHistory FROM Orders WHERE 1 = 0;
| 方法 | 優點 | 缺點 |
|---|---|---|
| SELECT INTO | 語法簡潔、速度快、無需手動定義欄位 | 不複製索引、主鍵、限制條件、觸發器、權限等 |
| 圖形介面/腳本產生 | 可完整複製所有物件屬性 | 步驟多、易出錯 |
| 手寫 CREATE TABLE | 完全掌控 | 耗時、維護成本高 |
WHERE 條件即可:SELECT * INTO NewTable FROM SourceTable。SELECT INTO 的資料庫;Oracle 需使用 CREATE TABLE AS SELECT。SELECT INTO ... WHERE 1=0 是 DBA 與開發人員快速複製表結構的利器,配合啟用選項,能大幅簡化開發與測試環境建置流程。