我們正在使用SQL並有一個腳本文件來生成數據庫和表。 我想寫一個通用腳本,將在所有dev/prod機器上執行 我給的文件名是FILENAME = N'c:\ Program Files \ Microsoft SQL Server \ MSSQL.3 \ MSSQL \ DATA \ DBname .mdf'通用數據庫設置腳本
它適用於我的機器,但不適用於所有開發機器,因爲它們都有不同的SQL路徑。 有沒有辦法讓這個設置爲通用? 我想讓這個腳本在所有安裝了SQL服務器的機器上運行。
我們正在使用SQL並有一個腳本文件來生成數據庫和表。 我想寫一個通用腳本,將在所有dev/prod機器上執行 我給的文件名是FILENAME = N'c:\ Program Files \ Microsoft SQL Server \ MSSQL.3 \ MSSQL \ DATA \ DBname .mdf'通用數據庫設置腳本
它適用於我的機器,但不適用於所有開發機器,因爲它們都有不同的SQL路徑。 有沒有辦法讓這個設置爲通用? 我想讓這個腳本在所有安裝了SQL服務器的機器上運行。
我想問題是,在不同的機器上你有不同的文件夾中的SQL Server實例。您可以在Windows註冊表檢查什麼是您的實例的文件夾名稱:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL
示例條目
Name - Data
MSSQLSERVER - MSSQL.1
SQL2k5 - MSSQL.2
然後在另一個分支,例如:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\Setup
你可以找到具有數據文件的目錄路徑。
如果您需要根據運行腳本的位置區分腳本的某些部分,則可以使用SQLCMD。
過去,當我需要執行數據庫恢復並且我知道數據路徑在兩個盒子之間不同時,我已經使用這種方法取得了成功。
類似下面應該工作:
SQLCMD -SMyDatabaseServer
-Q "RESTORE DATABASE $(DatabaseName) FROM DISK = '$(BackupLocation)\$(DatabaseName).bak' WITH NORECOVERY, STATS=10, REPLACE;"
-v
DatabaseName = MyDatabase
BackupLocation = "C:\SomeLocation"
-d master
-u [User]
-p [Password]
這是一個內聯查詢的版本。如果您需要使用SQL腳本文件,請將-Q「...」部分更改爲-i yourFile.sql,並將查詢本身複製並粘貼到sql文件中。 SQLCMD將採用由-v開關定義的變量,並替換由-Q或-i定義的查詢中的對應項。
有關更詳細的參考,請參閱:http://msdn.microsoft.com/en-us/library/ms180944.aspx。