获取插入项的ID

时间:2015-08-25 11:33:37

标签: c# sql sql-server

所以我有一个问题:

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());

我得到的id未被识别(即使它确实存在)。

如果我尝试将SELECT更改为[dbo].[bill].id,我会收到错误

  

多部分标识符" dbo.bill.id"无法受约束。

我也尝试过它SELECT MAX(id)(因为这是与标量最接近的东西),但是又一次,我得到了一个未识别的错误。

感谢阅读。

2 个答案:

答案 0 :(得分:7)

您可以使用

SELECT SCOPE_IDENTITY()

在插入查询之后,它将为您提供最后一个插入行的标识。有关SCOPE_IDENTITY()的详细信息,请查看MSDN。

  

返回插入标识列的最后一个标识值   相同的范围。

答案 1 :(得分:0)

insert语句可能包含OUTPUT INSERTED。子句。

这可能是这样的:

INSERT .... OUTPUT INSERTED.ID

使用执行标量调用执行。