我们正在使用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。