Sql server 有没有办法在INSERT INTO子句中选择一个带有条件的表?

Sql server 有没有办法在INSERT INTO子句中选择一个带有条件的表?,sql-server,conditional,insert-into,Sql Server,Conditional,Insert Into,我有两个表,我们可以称它们为table1和table2,还有一个变量来决定插入哪个表。我想这样做: DECLARE @intoTable2 BIT = 0; INSERT INTO IF @intoTable2 = 1 table2 ELSE table1 --put column names and values here... 两个表之间的所有列名除了第一个之外都是相同的,因此我还需要为第一列使用相应的IF语句。(我可以写两个INSERT到语

我有两个表,我们可以称它们为table1和table2,还有一个变量来决定插入哪个表。我想这样做:

DECLARE @intoTable2 BIT = 0;
INSERT INTO
    IF @intoTable2 = 1
        table2
    ELSE
        table1
--put column names and values here...
两个表之间的所有列名除了第一个之外都是相同的,因此我还需要为第一列使用相应的
IF
语句。(我可以写两个
INSERT到
语句中,并将它们包装在
IF-ELSE
子句中,但是有很多列名,我只是想避免它太笨重

但是有很多列名,我只是想让它不要太笨重

在TSQL中,不可能总是避免剪切和粘贴。请将长列列表保持在一行,以启用剪切和粘贴,而不会浪费垂直空间

在TSQL中,插入将位于IF之后

或者可以使用动态sql

declare @sql = concat(N'insert into ', case when @intoTable2 = 0 then 'table1' else 'table2' end, ' values ...')
  --print(@sql)  
  exec (@sql)

一个解决方案是将insert语句构建为一个字符串(字符),然后使用execute命令执行。是的,第二个选项是DaniDev在对这个问题的评论中所说的,看起来只是那些选项,我倾向于后者。谢谢!
declare @sql = concat(N'insert into ', case when @intoTable2 = 0 then 'table1' else 'table2' end, ' values ...')
  --print(@sql)  
  exec (@sql)