Вставить данные в таблицу SQL - PullRequest
1 голос
/ 14 января 2009

Данные в моей таблице данных похожи на

ID ContactName1  Designation1 ContactName2 Designation2
1  A             dummy        B            sam 

Структура таблицы моей таблицы

ID ContactName Designation

Я передаю значения в хранимой процедуре как:

@ContactName1
@Designation1

@ContactName2
@Designation2

Я хочу, чтобы один оператор вставки вставлял записи.

Как мне этого добиться?

Ответы [ 3 ]

2 голосов
/ 14 января 2009

Предполагается, что ваш первичный ключ идентификатора установлен на автоинкремент, а в вашей таблице три поля:

INSERT INTO DataTable (ContactName, Designation) VALUES 
    (@ContactName1, @Designation1), 
    (@ContactName2, @Designation2);

Что касается фактического идентификатора, если у вас его нет на автоинкременте, что, судя по комментарию к ответу Ивана, у вас его нет, вы можете получить его с помощью оператора MAX ():

SELECT MAX(ID) AS max_id FROM DataTable
1 голос
/ 14 января 2009

Учитывая, что она находится в хранимой процедуре, почему вас волнует, является ли это одним или двумя операторами INSERT? Ясно, что два утверждения тривиальны.

Некоторые СУБД позволяют перечислять несколько предложений значений в одном INSERT (@Ivan предлагает это):

INSERT INTO Table(ID, ContactName, Designation)
    VALUES(1, @ContactName1, @Designation1)
    VALUES(1, @ContactName2, @Designation2);

Я не уверен, нужна ли запятая между списками значений. Мне также не ясно, разрешено ли двум записям в Таблице иметь один и тот же идентификатор или как этот идентификатор определяется - это, вероятно, некоторые вещи с автоматическим приращением, и разные СУБД делают это по-разному.

Если ваша СУБД не поддерживает несколько предложений VALUES в одном операторе INSERT, то лучше всего принять два оператора INSERT. Если атомарность является проблемой, вы можете рассмотреть транзакции - хотя, если это только часть более крупной транзакции, ROLLBACK в случае ошибки, в частности, будет проблемой. Если ваша СУБД поддерживает SAVEPOINTS, то процедура может установить точку сохранения при входе и зафиксировать или выполнить откат до точки сохранения при выходе.

0 голосов
/ 17 января 2009

ВСТАВИТЬ В ЗНАЧЕНИЯ ТАБЛ.

EX: -

INSERT INTO TABLENAME VALUES(1,'INDIA')

ЗДЕСЬ ДВА КОЛОННЫ С.Н. & СТРАНА

...