Необходимо указать имена столбцов. Однако есть одно исключение. Если вы вставив точно одинаковое количество столбцов в таблице назначения имеет в том же порядке как они находятся в таблице, используйте следующий синтаксис:
INSERT INTO MyTable
VALUES ('val1A', 'val4A', 'val8A')
Заметьте, что это хрупкий способ выполнения INSERT
, потому что, если эта таблица изменится или столбцы упорядочены по-разному в другой системе, то может потерпеть неудачу или, что еще хуже, может помещать неправильные данные в каждый столбец.
Я обнаружил, что когда я столкнулся с множеством столбцов, я считаю, что запросы легче читать, если я могу их каким-то образом сгруппировать. Если имена столбцов длинные, я могу поставить их на отдельные линии, как так:
INSERT INTO MyTable
(
MyTable_VeryLongName_Col1,
MyTable_VeryLongName_Col4,
MyTable_VeryLongName_Col8,
-- etc.
)
SELECT
Very_Long_Value_1,
Very_Long_Value_4,
Very_Long_Value_8,
-- etc.
Или вы можете сгруппировать 2 колонки на линии, или положить пространства на каждые 5 или комментировать каждый 10-й линии, и т.д., что заставляет его легче читать.
Если вы обнаружили, в том числе имена столбцов обременительных, вставляя много строк, а затем попытаться цепочки данных вместе:
INSERT INTO MyTable (col1, col4, col8)
VALUES ('val1A', 'val4A', 'val8A'),
('val1B', 'val4B', 'val8B'),
-- etc.
Или UNION
их вместе:
INSERT INTO MyTable (col1, col4, col8)
SELECT 'val1A', 'val4A', 'val8A'
UNION ALL 'val1B', 'val4B', 'val8B'
UNION ALL ... -- etc.
Или выберите их из другого стол:
INSERT INTO MyTable (col1, col4, col8)
SELECT val1, va4, val8
FROM MyOtherTable
WHERE -- some condition is met
Я думаю, что первые из них является единственным способом сделать это. В чем разница между необходимостью ввода имен столбцов в сценарии 1 и сценарии 2? Такое же количество работы, на мой взгляд. Кроме того, вам даже не нужны имена столбцов. – PaulG
ЕСЛИ у вас есть столько столбцов, что это проблема, это может быть проблема с дизайном db. Просто сохраните имена столбцов в txt, copy-paste. – Mihai