SQL LocalDB 是開發測試 SQL 程式的好夥伴,免費,比 SQL Server 輕巧,行為模式比照標準 SQL Server,很適合裝在開發主機扮演 SQL 資料庫角色。(延伸閱讀:SQL Server 2012 Express LocalDB (SqlLocalDB) 深入剖析 by 保哥)

想新增 LocalDB 資料庫(建立 mdf 檔),最簡單的方法是透過 Visual Studio 的 SQL Server Object Exploere:

如果是用 VSCode 寫 .NET 6 程式,要怎麼生出 mdf 給 EF Core 使用?

以下示範建立名為 DummyTest 的 LocalDB 資料庫,放在 D:\LocalDB\DummyTest.mdf 及 DummyTest.ldf。

開始前先確認有安裝 SQL Server LocalDB,找得到 SQLLocalDB.exe,使用 SQLLocalDB.exe info 查詢 LocalDB 的預設個體名稱,一般會是 MSSQLLocalDB。

接下來只需連上 Data Source=(local)\MSSQLLocalDB,執行以下指令即可建立空白資料庫及 mdf、ldf 檔案:

CREATE DATABASE <db_name>
ON PRIMARY ( 
    NAME=<db_name>_data, 
    FILENAME = '<path>\<db_name>_data.mdf'
) 
LOG ON (
    NAME=<db_name>_log, 
    FILENAME = '<paht>\<db_name>_log.ldf'
)

既然知道原理,實作的選擇很多,可以用 PowerShell 建 SqlConnection("Data Source=(localdb)\MSSQLLocalDB") 再 CreateCommand() 跑指令,或是直接用 ODBC 工具 sqlcmd 簡單搞定:(以下範例將 mdf 建在目前所在路徑(透過 %cd% 取得))

set /P DB_NAME=資料庫名稱:
set MDF_PATH=%cd%
sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE DATABASE [%DB_NAME%] ON PRIMARY ( NAME=[%DB_NAME%_data], FILENAME = '%MDF_PATH%\%DB_NAME%_data.mdf') LOG ON (NAME=[%DB_NAME%_log], FILENAME = '%MDF_PATH%\%DB_NAME%_log.ldf');"

至於要移除 LocalDB 資料庫,sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "DROP DATABASE DummyTest" 即可。(注意:DROP DATABASE 時,mdf/ldf 檔會被刪除)

將 .mdf 檔部署至其他已安裝 SQL LocalDB 機器執行時,使用連線字串 Data Source=("(localdb)\MSSQLLocalDB;AttachDBFileName=<path_to_mdf> 建立 SqlConnection,MDF 檔將會以全大寫路徑名自動掛載成 LocalDB 資料庫(如下圖),.ldf 檔不用提供,系統將自動生成 *_log.ldf 檔,之後資料庫即可使用。

Tips of how to create SQL LocalDB .mdf file with command.


Comments

Be the first to post a comment

Post a comment


90 - 7 =