2014-01-20 4 views
2

Так у меня есть некоторые вставки:В SQL, можно ли использовать фиктивный столбец в инструкции insert?

insert into table (col1, col2, dummy, col3) values (1,1,1,1), (2,2,2,2) 

Столбец «манекен» на самом деле не существует, это необходимо, потому что я генерировать вставки заявление, даже заголовок столбца, а некоторые столбцы должны быть проигнорированы на основе ситуации , но данные все те же, это сделало бы мою жизнь намного легче, если мне не нужно возиться с данными и просто с заголовком.

Поэтому я предполагаю, что это по-другому: возможно ли «игнорировать» столбец в инструкции insert.


Выражаясь по-другому другому, я пытаюсь сделать вставки заявление на 3 колонки с 4-мя колоннами на сумму данных, и интересно, если есть способ справиться с этим на уровне SQL вместо на уровне логики кода.


Итак, вот длинный пример, у меня есть этот 2D-массив.

{ {101,102,103,104}, {201,202,203,204}, ... } 

У меня есть таблица со следующими столбцами

col1, col2, col3, col4 

Теперь один пользователь говорит:

"I would like to only use col1, col2, col4" 

И другой пользователь говорит:

"I would like to only use col2, col3" 

Как сделать это, если я не хочу связываться с 2D-массив данных?

insert into table (col1, col2, ignore, col4) 
    values (101,102,103,104), (201,202,203,204) 


insert into table (ignore, col2, col3, ignore) 
    values (101,102,103,104), (201,202,203,204) 

Обратите внимание, что заказ имеет значение.

ответ

6

Это звучит как безумное требование, но есть способ заставить его работать.

С таблицей t, которая имеет 3 столбца (a,b,c), вы можете использовать конструктор значений таблиц, доступный в SQL-Server 2008 и выше.Обратите внимание, как вы можете изменить какие столбцы ввода будут вставлены в таблицу, изменяя только одну строку кода SQL:

INSERT INTO t 
    (a, b, c) 
SELECT 
    col1, col3, col4   -- this is the only line needs configured 
           -- col2 is ignored 
FROM 
    (VALUES 
    (1, 2, 3, 4), 
    (11,12,13,14), 
    (21,22,23,24), 
    (31,21,33,34) 
    ) AS x 
    (col1, col2, col3, col4) 
; 

Испытано на SQL-Fiddle

Если таблица имеет 4 колонки (a,b,c,d) - так же как и список значений - аналогичный подход будет:

INSERT INTO t 
    (a, b, c, d) 
SELECT 
    col1, NULL, col3, col4   -- this is the only line needs configured 
           -- col2 is ignored and NULLs are put 
           -- into column "b" 
FROM   --- rest of the code is the same 
+1

Из последнего обновления от OP кажется, что в таблице на самом деле много столбцов, но разные пользователи хотят использовать разные (например, только 1, 2 и 4 или только 2 и 3). В конце концов, кажется, что проблема заключается в лень: вместо исключения столбцов дважды (из списка столбцов и из списка значений) при создании инструкции INSERT OP хочет исключить их только один раз (из списка столбцов, но в способ, которым список значений остается в силе). –

+0

Блестящий! Я уже пошатнулся и только закончил беспорядок как с заголовком, так и с данными. Но ваше решение довольно удивительно. – Bill

+0

@YongkeBillYu: Какой? –

4

Возможно ли «игнорировать» столбец в инструкции вставки.

Да, не включайте его в список полей. Например:

insert into table (col1, col2, col3) 

будет вставить только значения в col1, col2, col3 и оставит оставшуюся часть столбцов (в новой строке) с их значениями по умолчанию.

+0

Но данные будут выровнены неправильно. Данные все равно будут (1,1,1,1), (2,2,2,2) – Bill

+0

@YongkeBillYu: Я буду честным, я действительно не уверен, что вы имеете в виду. Не включать значения в список значений? –

+0

В принципе, я пытаюсь сделать инструкцию insert в 3 столбцах с 4 столбцами данных и задается вопросом, есть ли способ справиться с этим на уровне SQL, а не на логическом уровне кода. – Bill

Смежные вопросы