2015-08-25 2 views
4

Так что есть запрос, как, например:Получение ID вставленного элемента

cmd.CommandText = @"INSERT INTO [dbo].[bill](bruto, waiterid, reversalid, number, ddate, tableid, total, printed, posplace, guestid, numberofguests, closedtime, methodofpaymentid, realdate) " + 
        "VALUES (@bruto, @waiterid, 0, 0, @ddate, 1, @total, 'True', 0, 0, 0, @closedtime, @methodofpaymentid, @realtime) " + 
        "SELECT id"; 
//+ lines of cmd.Parameter.AddWithValue(...,...); 

Но как только я пытаюсь выполнить запрос с:

int newId = Convert.ToInt64(cmd.ExecuteScalar()); 

Я понимаю, что идентификатор не определен (даже хотя оно существует).

Если я попытаться изменить SELECT к [dbo].[bill].id, я получаю ошибку

Мульти-часть идентификатора «dbo.bill.id» не могут быть связаны.

Я также пробовал сделать это SELECT MAX(id) (так как это самое близкое к скаляру), но опять же я получаю неопознанную ошибку.

Спасибо за чтение.

+0

Не могли бы вы разместить все инструкции SELECT в Q – wiretext

+0

@tinka это он, мне просто нужен идентификатор, и если вы имеете в виду все запросы SELECT, которые у меня есть для этой таблицы, это будет более 100 операторов. – NemanjaT

ответ

7

Вы можете использовать

SELECT SCOPE_IDENTITY() 

только после вставки запроса, и это даст вам идентификатор последней вставки строки. Подробнее см. В MSDN на странице SCOPE_IDENTITY().

Возвращает последнее значение идентичности, вставленное в столбец идентичности, в тот же объем.

+1

это почти сделал. Спасибо, Рахул! Я приму ответ, когда смогу (~ 9 минут) – NemanjaT

0

Оператор вставки может содержать ВЫХОД ВСТАВЛЕН. пункт.

Это может выглядеть следующим образом:

INSERT .... OUTPUT INSERTED.ID 

и выполнен с выполнения скалярного вызова.

+0

Я действительно пробовал это, на самом деле, но без успеха, к сожалению. Я забыл упомянуть об этом. – NemanjaT

+0

Это звучит странно, потому что я делал это так несколько раз –

+0

Из того, что я читал из других вопросов StackOverflow, это действительно работало для некоторых людей, да, но похоже, что это зависит от того, какую версию SQL Server вы используете , – NemanjaT

Смежные вопросы