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

时间:2019-04-19 21:35:01

标签: 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 INTO语句,然后将它们包装在IF-ELSE子句中,但是列名很多,我只是想避免它太笨拙。

1 个答案:

答案 0 :(得分:1)

  

但是列名很多,我只是想避免它太笨拙。

在TSQL中并非总是可能避免剪切和粘贴。将长列列表保持在一行上,以实现剪切和粘贴操作,而不浪费垂直空间

在TSQL中,插入将在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)