MSSQL服务器语法检查,在一个脚本中针对多个环境
我知道,这是一个非常令人恼火的问题,它源于糟糕的流程,但这是一个我目前面临的问题 当我们一半的环境模式发生了变化,而另一半却没有变化时,我陷入了疯狂。一半现在有一个额外的字段。因此,有一个基本的插入脚本需要在两种环境中运行 例: 但在其他环境中,它需要MSSQL服务器语法检查,在一个脚本中针对多个环境,sql,sql-server,Sql,Sql Server,我知道,这是一个非常令人恼火的问题,它源于糟糕的流程,但这是一个我目前面临的问题 当我们一半的环境模式发生了变化,而另一半却没有变化时,我陷入了疯狂。一半现在有一个额外的字段。因此,有一个基本的插入脚本需要在两种环境中运行 例: 但在其他环境中,它需要 insert into Tbl values ('foo','bar') 我尝试用一个“如果”来解决这个问题,因为我们有一个表来标识您所处的环境 if (select name from environment) in ('local','
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')
不幸的是,MS SQL server语法检查了我的整个脚本,并注意到else部分与当前表的架构不匹配
我该怎么办?需求基本上是:这必须是一个在两种环境中运行的脚本。这可能吗
感谢您抽出时间。由于语法检查,您可能需要使用动态SQL:
if (select name from environment) in ('local','local2')
execute('insert into Tbl values (''foo'')')
else
execute('insert into Tbl values (''foo'', ''bar'')')
只有在执行内部语句时才会检查语法。由于语法检查,您可能需要使用动态SQL:
if (select name from environment) in ('local','local2')
execute('insert into Tbl values (''foo'')')
else
execute('insert into Tbl values (''foo'', ''bar'')')
只有在执行内部语句时才会检查语法。您可以尝试使用动态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'')'
您可以尝试使用动态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'')'