Я хочу выбрать обратно данные, которые я только что вставил в базу данных. Я знаю, что OUTPUT можно использовать, и мы можем вызвать INSERTED. [ColumnName], чтобы захватить значения, которые были вставлены. Могут ли эти значения задаваться какой-либо переменной или иметь псевдоним? Я не хочу использовать таблицу TEMP, потому что я хочу использовать переменные, если это возможно.SQL Return Введенные данные
Было бы хорошо, если бы решение работало, когда ПК является или не является столбцом идентификации.
EDIT: Contacts.PhoneNumberID является внешним ключом к PhoneNumber.ID я хочу сделать как вставку заявления спина к спине, и мне нужно идентификатор из PhoneNumber использовать для Contacts.PhoneNumberID
EDIT:. [PhoneNumber] [ID] имеет значение по умолчанию, указанное в базе данных, то есть, как идентификатор создается
Вот что я ищу:
INSERT INTO [PhoneNumber] (Number)
OUTPUT INSERTED.ID, INSERTED.Number
VALUES ('555-555-5555')
INSERT INTO [Contacts] (Name,PhoneNumberID)
VALUES ('SomeName', {ID From previous insert})
Можно ли как некоторые псевдоним заявления вставки сказать:
INSERT INTO [PhoneNumber] (Number)
OUTPUT INSERTED.ID, INSERTED.Number
VALUES ('555-555-5555') as A
Я знаю, что мы не можем на самом деле псевдоним в заявлении вставки, как это сделано выше, я ищу правильный способ сделать это.
Тогда вы могли бы сделать это:
INSERT INTO [Contacts] (Name,PhoneNumberID)
VALUES ('SomeName', A.ID)
Я иду за конечный результат чего-то похожее на это:
INSERT INTO [PhoneNumber] (Number)
OUTPUT INSERTED.ID, INSERTED.Number
VALUES ('555-555-5555') as A
INSERT INTO [Contacts] (Name,PhoneNumberID)
VALUES ('SomeName', A.ID)
Причина Я пытаюсь сделать это:
Я хочу поставить обоих вкладчиков ts в транзакционном блоке, если один из них терпит неудачу, то я могу откатить и ничего не совершить.
Я не понимаю ваш вопрос или что вы пытаетесь сделать здесь. Что такое псевдоним? Если вы хотите, чтобы несколько операторов были частью транзакции, вы просто добавляете оба оператора внутри транзакции. Лучшим подходом было бы обернуть все это внутри блока try/catch. –
Извинения. Я добавил изменение относительно того, почему я пытаюсь это сделать. Все это основано на внешних ключах, и мне нужна PK из первой таблицы, чтобы вставить во вторую таблицу. – TheMiddleMan
Я знаю, что вы упомянули о попытке решить эту проблему без таблицы 'TEMP', однако [это решение] (http: // stackoverflow .com/a/10999467/3854195), используя переменную таблицы, будет работать так, как вы описали. – Morpheus