Я знаю, что сделал это несколько лет назад, но не могу вспомнить синтаксис и не могу его найти нигде из-за загрузки тонны справочных документов и статей о «массовом импорте».
Вот что я хочу сделать, но синтаксис не совсем правильный ... пожалуйста, кто-то, кто делал это раньше, помогите мне :)
INSERT INTO dbo.MyTable (ID, Name)
VALUES (123, 'Timmy'),
(124, 'Jonny'),
(125, 'Sally')
Я знаю, что это близко к правильному синтаксису. Мне может понадобиться слово «BULK» или что-то еще, я не могу вспомнить. Есть идеи?
Мне это нужно для базы данных SQL Server 2005. Я пробовал этот код, но безрезультатно:
DECLARE @blah TABLE
(
ID INT NOT NULL PRIMARY KEY,
Name VARCHAR(100) NOT NULL
)
INSERT INTO @blah (ID, Name)
VALUES (123, 'Timmy')
VALUES (124, 'Jonny')
VALUES (125, 'Sally')
SELECT * FROM @blah
Я получаю Incorrect syntax near the keyword 'VALUES'.
sql-server
tsql
sql-server-2005
insert
Тимоти Хоури
источник
источник
INSERT INTO @blah (ID, Name) VALUES (123, 'Timmy'), (124, 'Jonny'), (125, 'Sally')
«ЗНАЧЕНИЯ» появляются только один раз, и вам нужно запятые между наборами.Ответы:
Для SQL Server 2008, можете сделать это в одном предложении VALUES точно в соответствии с оператором в вашем вопросе (вам просто нужно добавить запятую для разделения каждого оператора значений) ...
источник
INSERT table (columnlist)
select
вы создаете набор со столбцами и строками, и, создавая эти строки, они могут бытьinsert
преобразованы в другую таблицу с равным количеством столбцов. Вы даже можете использовать смесь литералов и значений. Например, использованиеinsert
withselect 'A', ID from ATable
будет вставлять «A» в первый столбец каждый раз, а значение столбца ID соответствующей строки ATable во втором столбце.Ваш синтаксис почти работает в SQL Server 2008 (но не в SQL Server 2005 1 ):
1 Когда на вопрос был дан ответ, не было ясно, что речь шла о SQL Server 2005. Я оставляю этот ответ здесь, так как считаю, что он все еще актуален.
источник
Если ваши данные уже есть в вашей базе данных, вы можете сделать:
Если вам нужно жестко закодировать данные, то SQL 2008 и более поздние версии позволят вам сделать следующее ...
источник
Использование
INSERT INTO ... VALUES
синтаксиса, как в ответе Даниэля Вассалло, имеет одно досадное ограничение:Самый простой способ обойти это ограничение - использовать производную таблицу, например:
LiveDemo
Это будет работать, начиная с SQL Server 2008+
источник
C. Specifying multiple values as a derived table in a FROM clause
Вы могли бы сделать это (некрасиво, но это работает):
источник
Это достигнет того, о чем вы спрашиваете:
Для будущих разработчиков вы также можете вставить из другой таблицы :
Или даже из нескольких таблиц :
источник
Вы можете использовать союз:
источник
Это выглядит нормально для SQL Server 2008. Для SS2005 и более ранних версий вам необходимо повторить оператор VALUES.
РЕДАКТИРОВАТЬ :: Мой плохо. Вы должны повторить «INSERT INTO» для каждой строки в SS2005.
источник
Было бы проще использовать XML в SQL Server для вставки нескольких строк, иначе это станет очень утомительным.
Посмотреть полную статью с объяснениями кода здесь http://www.cyberminds.co.uk/blog/articles/how-to-insert-multiple-rows-in-sql-server.aspx
Скопируйте следующий код на сервер sql, чтобы просмотреть образец.
источник
ИЛИ ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ ДРУГОЙ ПУТЬ
источник
Я использовал следующее:
Это добавит десять строк с уникальными идентификаторами GUID для идентификатора и имени.
Примечание: не заканчивайте последнюю строку (GO 10) знаком ';' потому что он выдаст ошибку: произошла фатальная ошибка скриптинга. При синтаксическом анализе GO обнаружен неправильный синтаксис.
источник
В соответствии с INSERT (Transact-SQL) (SQL Server 2005) вы не можете пропустить
INSERT INTO dbo.Blah
и должны указывать его каждый раз или использовать другой синтаксис / подход,источник
Это работает очень быстро и эффективно в SQL. Предположим, у вас есть таблица
Sample with 4 column a,b,c,d where a,b,d are int and c column is Varchar(50)
.Таким образом, вы не можете вставить несколько записей в эту таблицу, используя следующий запрос, не повторяя оператор вставки,
Также с использованием C #
SqlBulkCopy bulkcopy = new SqlBulkCopy(con)
Вы можете вставить 10 строк одновременно
источник
При множественной вставке вы вставляете вычисленные строки, полученные из строк, возвращенных в результате оценки подзапроса, в одну или несколько таблиц.
Безусловный INSERT ALL : - Чтобы добавить несколько строк в таблицу одновременно, вы используете следующую форму инструкции INSERT:
Укажите ALL, а затем несколько insert_into_clauses для выполнения безусловной множественной вставки. Oracle Database выполняет каждый insert_into_clause один раз для каждой строки, возвращаемой подзапросом.
Запрос вставки в одну строку
источник
Другие здесь предложили пару синтаксисов из нескольких записей. Поясняя это, я предлагаю вам сначала вставить временную таблицу и оттуда вставить основную таблицу.
Причина этого заключается в том, что загрузка данных из запроса может занять больше времени, и вы можете в конечном итоге заблокировать таблицу или страницы дольше, чем это необходимо, что замедляет выполнение других запросов к этой таблице.
Кроме того, ваши идентификаторы должны быть идентичными (1,1), и вам, вероятно, не следует их вставлять в большинстве случаев. Пусть SQL решит это за вас.
источник