我现在正在使用sqlcmd
一段时间来更新我们项目的数据库。
在我们使用这样的脚本之前:
:setvar relativepath D:\Project1\Sql
:r $(relativepath)\Tables\CreateTable1.sql
:r $(relativepath)\SP\Table1.sql
Run Code Online (Sandbox Code Playgroud)
这是在开发和发布期间更新数据库的好方法。
但是现在我们使用不同的目录,这取决于我们是在开发分支还是生产分支(Subversion)。
我们希望避免错误,以防有人通过根据所选数据库名称设置路径将脚本提交到错误的目录。像这样的事情:
:setvar relativepath "D:\Project1\Prod\Sql"
if (DB_name() = 'Project1' OR DB_name() = 'Project1_Dev')
begin
:setvar relativepath "D:\Project1\Dev\Sql"
end
Run Code Online (Sandbox Code Playgroud)
我找不到办法做到这一点。有人有想法吗?
[更新] 解决方案:(坦克到 wBob)
我有一个名为的脚本: setRelativePath.sql
:out D:\Project1\SQL\Temp\temp.sql
go
declare @bdName varchar(15) = DB_name()
--Here the print got saved to D:\Project1\SQL\Temp\temp.sql
if @bdName = 'Project1' OR @bdName = 'Project1_DEV'
print ':setvar relativepath D:\Project1\DEV\Sql'
else if @bdName = 'Project1_PROD'
print ':setvar relativepath D:\Project1\PROD\Sql'
else
raiserror( 'Unknown value (%s) for sqlcmd …
Run Code Online (Sandbox Code Playgroud)