2010-12-17 46 views
1

这是一个真正令人恼火的问题,因为我知道,这是一个不好的过程,但这是一个我现在背负的问题。MSSQL服务器语法检查,针对一个脚本中的多个环境

当我们的环境改变了一半而不是另一半时,我陷入了疯狂。一半现在有一个额外的领域。因此,有需要在两种环境下运行一个基本的插入脚本

例如:

insert into Tbl values ('foo') 

但它需要的其他环境是

insert into Tbl values ('foo','bar') 

我试图用一个“如果解决这'因为我们有一个表格来标识你在什么环境中

if (select name from environment) in ('local','local2') 
insert into Tbl values ('foo') 
else 
insert into Tbl values ('foo, 'bar') 

Unf幸运的是,MS SQL服务器语法检查我的整个脚本,并注意到else部分与当前表的模式不匹配。

我该如何处理?要求基本上是:这必须是在两种环境中运行的单个脚本。这可能吗?

谢谢你的时间。

回答

3

由于语法检查,你可能需要使用动态SQL:

if (select name from environment) in ('local','local2') 
    execute('insert into Tbl values (''foo'')') 
else 
    execute('insert into Tbl values (''foo'', ''bar'')') 

语法得到仅在执行检查的内部声明。

2

你可以尝试使用动态SQL来规避语法检查:

if (select name from environment) in ('local','local2') 
exec sp_executesql N'insert into Tbl values (''foo'')' 
else 
exec sp_executesql N'insert into Tbl values (''foo'', ''bar'')' 
相关问题