有没有办法在带有条件的 INSERT INTO 子句中选择 table ?

Is there a way to choose a table in an INSERT INTO clause with a conditional?

我有两个table,我们可以称它们为table1和table2,还有一个变量来确定要插入哪个table。我想做这样的事情:

DECLARE @intoTable2 BIT = 0;
INSERT INTO
    IF @intoTable2 = 1
        table2
    ELSE
        table1
--put column names and values here...

两个 table 之间的所有列名都相同,除了第一个,所以我还需要为第一列提供相应的 IF 语句。 (我可以只写出两个 INSERT INTO 语句并将它们包装在一个 IF-ELSE 子句中,但是有很多列名称,我只是想避免它太笨重。

but there are a lot of column names, and I'm just trying to keep it from being too clunky.

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

在 TSQL 中,INSERT 将在 IF 之后出现。

DECLARE @intoTable2 BIT = 0;
IF @intoTable2 = 1
BEGIN
    INSERT INTO table2 ( ... )
    values ( ... );
END
ELSE
BEGIN
    INSERT INTO table2 ( ... )
    values ( ... );
END

或者您可以使用动态 sql

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