如何在sqlClient中插入数据的同时获得自动递增的id?

时间:2017-09-22 11:05:27

标签: sqlclient

我正在使用存储过程来插入数据。 我有2个表用于存储客户详细信息,另一个用于存储付款历史记录。因此,当我按下表单上的插入详细信息按钮时,将调用此存储过程。我必须同时在两个表中插入数据。

[dbo]。[CustomerDetails] 主键 CustomerId ,设置为自动增量

因此,在插入时,我希望 [dbo]中的 CustomerId 设置为 RecordId 。[PaymentHistory] ​​

注意:所有其他信息可以相同,但每个帐户由CustomerDetails中的主键CustomerId区分

AutoCompleteTextView

3 个答案:

答案 0 :(得分:2)

对于MSSQL,有SCOPE_IDENTITY(),它在存储过程中使用起来非常安全,即使我自己从未使用过它,所以我无法评论它可能存在的任何奇怪之处。

https://docs.microsoft.com/en-us/sql/t-sql/functions/scope-identity-transact-sql

答案 1 :(得分:1)

大家好我用SCOPE_IDENTITY解决了我的问题。对于大多数应用程序,我们需要返回最近的ID,我们可以使用@@ IDENTITY,SCOPE_IDENTITY(),IDENT_CURRENT()。那些不知道它们是什么的人可以通过这个链接来理解这些

https://www.codeproject.com/Articles/103610/Difference-between-IDENTITY-SCOPE-IDENTITY-IDENT-C

代码如下:

DECLARE @id int;

INSERT INTO [dbo].[CustomerDetails] ([CustomerName], [FatherName], [Cnic], [ContactNo], [Address], [City], [StartDate], [EndDate],[SamanDesc], [Tola], [Masha], [Rati], [Location], [Amount], [Percentage], [Months], [Days], [Status]) 
VALUES (@CustomerName, @FatherName, @Cnic, @ContactNo, @Address, @City, @StartDate, @EndDate, @SamanDesc, @Tola, @Masha, @Rati, @Location, @Amount, @Percentage, @Months, @Days, @Status);

SET @id = (SELECT SCOPE_IDENTITY());

INSERT INTO [dbo].[PaymentHistory] ([RecordId], [DatePaid], [Amount], [AmountPaid], [Profit])
VALUES (@id, @StartDate, @Amount, 0, 0);

答案 2 :(得分:0)

如果您的数据库是MySQL,请使用

select last_insert_id() from dual;

这将检索此信息。