获取插入项的ID

4

我有一个这样的查询:

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)(因为这是最接近标量的东西),但仍然遇到未识别的错误。

感谢您的阅读。


请问您能否在Q中发布所有的SELECT语句? - wiretext
@tinka 这就是了,我只需要这个ID。如果你指的是我对那个表格所有的SELECT查询语句,那将会超过100条语句。 - Toza
2个回答

7
您可以使用以下代码来调用API:
SELECT SCOPE_IDENTITY()

在你的插入查询之后添加它,它会给出最后一次插入行的标识符。有关SCOPE_IDENTITY()的详细信息,请参阅MSDN。

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


1
这基本上就做到了。谢谢,Rahul!我会在能够接受答案时(大约9分钟)接受它。 - Toza

0

插入语句可能包含一个 OUTPUT INSERTED 子句。

它可能看起来像这样:

INSERT .... OUTPUT INSERTED.ID

并通过您的执行标量调用执行。


我确实尝试过,但不幸的是没有成功。我忘了提到这一点。 - Toza
这听起来很奇怪,因为我已经用这种方法做了好几次了。 - Thomas Krojer
从我在其他StackOverflow问题中阅读到的内容来看,它确实对一些人起作用,但似乎取决于您使用的SQL Server版本。 - Toza
似乎首次出现在 SQL Server 2008。 - Thomas Krojer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接