MSSQL服务器语法检查,在一个脚本中定位多个环境

时间:2010-12-17 15:34:39

标签: sql sql-server

这是一个非常令人恼火的问题,我知道,这是一个很糟糕的过程,但这是一个我目前背负的问题。

当模式改变了一半的环境而不是另一半时,我陷入了疯狂。一半现在有一个额外的领域。所以有一个基本的插入脚本需要在两个环境中运行

例如:

insert into Tbl values ('foo')   

但在其他环境中需要

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

我尝试用'if'来解决这个问题,因为我们有一个表格来确定你所处的环境

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

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

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

感谢您的时间。

2 个答案:

答案 0 :(得分:3)

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

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

只有在执行内部语句时才会检查语法。

答案 1 :(得分: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'')'