Вставьте много значений в таблицу SQL Server - PullRequest
4 голосов
/ 08 октября 2011

Я не знаю, но это может быть бессмысленным вопросом для многих из вас, но меня спросили в интервью, и я действительно запутался, поскольку только начал работать над SQL Server.Если у меня есть сотни полей для вставки в базу данных SQL Server за один шаг, нужно ли мне писать каждое имя столбца в моей команде SQL.

INSERT into Database(field1, field2,...field100) VALUES(val1, val2,...val3)

Я получаю эти значения из текстовых полей и комбинированных списков.и аналогичные элементы управления.Это единственный способ сделать это или есть простой способ сделать это?Я не очень хорошо знаю SQL Server.Я пытаюсь научиться этому.Я использую C # 4.0, SQL Server 2008 Express.

РЕДАКТИРОВАТЬ

Позвольте мне объяснить вопрос Interveiw.Если быть точным, они спросили меня, что у них есть форма, которую должен заполнить пользователь (в winforms).Эта форма была разделена на несколько вкладок (5-6) в элементе управления вкладками.Теперь они хотели подавать данные в базу данных одним щелчком мыши, они не хотели отправлять данные страницу за страницей.Скорее они хотели кормить данные одним нажатием кнопки.Либо полные данные, либо их нет.

Я ответил, что сделаю это через транзакцию.Для ясности я создам команду вставки для каждой страницы и выполню их в транзакции.В случае успеха совершить, иначе откат.

Но немедленный ответ был: «Транзакция в порядке, но вы напишите все значения текстовых полей в команде вставки?»

Я сказал, что если что-то равно нулю, я буду игнорировать, но все времязначения не могут быть нулевыми, так как разные пользователи будут заполнять форму по-разному.Поэтому лучше включить все значения текстовых полей (или параметры sql) в нашу команду SQL.

Но вопрос снова был тот же: «Будете ли вы записывать все значения текстовых полей, если они вообще будут считать до 100 или 200 с?? "

со смущенным умом я ответил" да ".

И они не выглядели удовлетворяющими.

Вот почему я спросил в 1 комментарии.Можно ли это сделать с помощью списка.Я имею в виду, если у меня есть все элементы управления, добавленные в список, можем ли мы использовать этот список в любом случае?Но теперь я чувствую, мы не можем.

И я выгнал меня из списка выбранных кандидатов :-)) LOL, неважно.

Ответы [ 4 ]

4 голосов
/ 12 октября 2011

Попробуйте использовать этот очень простой способ сделать пакетную вставку записей в таблицу:

 INSERT INTO (TABLE NAME)
 (COLUMN NAMES)
 SELECT (FIELDS SHOULD MATCH THE COLUMN NAMES PROVIDED) 
 FROM (SOURCE(Could be variable or another table))
4 голосов
/ 08 октября 2011

Если вы вставляете все столбцы с возможностью вставки в столбцы таблицы (т. Е. Не вычисляемые, идентификаторы, инверсии строк), то вы можете опустить явный список столбцов и просто выполнить

INSERT into YourTable
Values(val1, val2,...val3) /*Needs to be in order as per table definition*/

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

Предполагая, что все пропущенные столбцы обнуляются или имеют значение по умолчанию (если не произойдет сбой insert), вы также можете определить представление с требуемым подмножеством столбцов, затем вы можете вставить в него, не перечисляя столбцы явно.

3 голосов
/ 08 октября 2011

Если вы хотите вставить сотни строк за один шаг, вы можете сделать это следующим образом (SQL Server 2008):

INSERT INTO TABLENAME VALUES
(fieldValue, fieldValue, ...),
(fieldValue, fieldValue, ...),
(fieldValue, fieldValue, ...);
1 голос
/ 08 октября 2011

Поскольку вы признались, что были сбиты с толку, что и следовало ожидать в интервью, я подозреваю, что ответ, который они искали, был:

(сокращение вставки с «сотен» до четырех строк из трех столбцов,просто чтобы было легче писать полностью):

INSERT INTO Table1 (field1, field2, field3) 
   VALUES (1, 2, 3), 
          (1, 2, 4), 
          (2, 1, 9), 
          (2, 3, 8);

Другими словами, я скорее думаю, что вопрос заключался в следующем: «Вам нужно повторять имена столбцов для каждой вставленной строки?"ответ на этот вопрос - нет.

Другая мысль: возможно, они хотели, чтобы вы указали на относительные преимущества полного исключения имен столбцов из оператора INSERT, например,

INSERT INTO Table1 
   VALUES (1, 2, 3), 
          (1, 2, 4), 
          (2, 1, 9), 
          (2, 3, 8);

Ответк этому относится то, что использование неявного порядка увеличивает риск получения ошибки, как очевидной (вставка не удалась), так и более скрытой (вставка завершается успешно, но значения оказываются в неправильных столбцах из-за неявного языка преобразования типов SQL)feature).


Если вы говорите о сотнях строк (а не столбцов), то они, возможно, намекают на табличные параметры, например статья Эрланда Соммарского * по этому вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...