Есть ли способ выбрать таблицу в предложении INSERT INTO с условным условием? - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть две таблицы, мы можем назвать их table1 и table2, и переменная, чтобы определить, какую таблицу вставлять INTO.Я хочу сделать что-то вроде этого:

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

Все имена столбцов между двумя таблицами одинаковы, кроме первой, поэтому мне также потребуется соответствующий оператор IF для первого столбца, какЧто ж.(Я мог бы просто написать два INSERT INTO оператора и обернуть их в предложение IF-ELSE, но есть много имен столбцов, и я просто пытаюсь не допустить, чтобы он был слишком неуклюжим.

1 Ответ

1 голос
/ 20 апреля 2019

но есть много имен столбцов, и я просто пытаюсь не допустить, чтобы они были слишком неуклюжими.

В 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)
...