Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MSSQL服务器语法检查,在一个脚本中针对多个环境_Sql_Sql Server - Fatal编程技术网

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'')'