我们正在使用SQL并拥有一个脚本文件来生成数据库和表。 我正在尝试编写一个将在所有dev / prod机器上执行的通用脚本 我给出的文件名是FILENAME = N'c:\ Program Files \ Microsoft SQL Server \ MSSQL.3 \ MSSQL \ DATA \ DBname.mdf'
它适用于我的机器,但不适用于所有开发机器,因为它们都有不同的SQL路径。 有没有办法使这个设置成为通用的? 我想让这个脚本在安装了SQL服务器的所有机器上运行。
答案 0 :(得分:1)
我想问题是在不同的机器上你有不同文件夹中的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
您可以找到包含数据文件的目录路径。
答案 1 :(得分:0)
如果您需要根据脚本的运行位置区分脚本的某些部分,可以使用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。