我的查詢是關於使用非硬編碼的文件位置來初始化變量DefaultDataPath和DefaultLogPath。在採用數據庫項目作爲我們的標準部署和數據庫管理工具並將我們現有的腳本遷移到數據庫項目之前,我們一直在使用SET CREATE和INITIALIZE腳本來設置數據庫。我們有下面的SQL查詢與文件位置來創建數據庫:以編程方式設置DefaultDataPath和DefaultLogPath(使用SQL語句初始化路徑)
SET @data_path = (SELECT SUBSTRING(filename, 1, CHARINDEX(N'master.mdf', LOWER(filename)) - 1)
FROM sys.sysaltfiles WHERE dbid = 1 AND fileid = 1);
set @[email protected]_path + 'CF_DB.mdf'
set @cfdata='CF_DB_Data'
set @cflog='CF_DB_Log'
set @[email protected]_path + 'CF_DB_log.ldf'
declare @sql nvarchar(500)
set @sql = 'CREATE DATABASE [CF_DB] ON (NAME = ' + quotename(@cfdata) + ',FILENAME =' + quotename(@mdb_file) + ',SIZE = 53, FILEGROWTH = 10%) LOG ON (NAME =' + quotename(@cflog) + ',FILENAME = ' + quotename(@ldf_file) + ', SIZE = 31, FILEGROWTH = 10%)COLLATE SQL_Latin1_General_CP1_CI_AS'
exec(@sql)
在這裏,我們試圖找出對主數據庫的MDF文件的位置,並使用同一位置CREATE DATABASE。
問題:使用生成的腳本(部署操作之後),有一個自動生成的SQLCMD變量,用一些默認路徑(硬編碼的一個)或空字符串進行初始化(它們使用SQL Server 2008或2005使用的默認數據文件路徑)。
:setvar DatabaseName "CF"
:setvar DefaultDataPath "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER2008\MSSQL\DATA\"
:setvar DefaultLogPath "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER2008\MSSQL\DATA\"
我們需要使它像現有的系統一樣工作。我們需要知道MASTER DB數據和日誌文件的路徑,並使用相同的路徑來初始化DefaultDataPath和DefaultLogPath。我們無法使用PreDeployment腳本,因爲在將PreDeploymentScript嵌入最終Deploy Scripts之前,數據庫設置是通過Database Project生成的腳本完成的。
下一件大事:開發人員需要在SQL Server Management Studio中切換到SQLCMD模式以運行由DB Project生成的腳本。這是我們的實施團隊的要求,不要使用SQLCMD模式來設置DATBASE。爲了克服這些步驟,我需要修改生成的SQL文件,並使用SQL變量而不是SQLCMD變量。我們可以生成乾淨的SQL語句並保持自動化腳本生成嗎?我知道這兩個問題都是相互關聯的,因此一個解決方案將解決另一個問題。
感謝您對上述討論提出的任何良好建議或幫助。
問候
Sumeet
要解決SQLCMD問題,您可以使用DACPAC部署嗎? – LeedsDBA 2015-09-20 13:38:12