在 SQL Server 和 C# 中获取最后插入的字符串 ID

Posted

技术标签:

【中文标题】在 SQL Server 和 C# 中获取最后插入的字符串 ID【英文标题】:Get the last inserted string Id in SQL Server & C# 【发布时间】:2016-03-21 09:09:09 【问题描述】:

我有一个DataTable BonLivraison,其主键是一个格式为2016/ + 递增数字的字符串。我用这段代码生成了这个主键:

SqlCommand cmdRow = new SqlCommand("select TOP(1) CodeBonLivraison from BonLivraison ORDER BY 1 DESC", con);

string LastCode = (string)cmdRow.ExecuteScalar();
string getID = LastCode.Split('/')[1];
int getIntID = Convert.ToInt32(getID);

numeroBonReceptionTextBox1.Text = DateTime.Now.Year.ToString() + "/" + (getIntID + 1).ToString();

此代码通常会生成主键2016/1...2016/2....直到2016/10 它重新生成2016/10,这是主键违规。

那么如何修改此代码以获取最后插入的密钥并获取 2016/11...2016/12...

【问题讨论】:

我猜,在"2016/10" 之后,您还没有更新CodeBonLivraison 列中的这个值。只需再次检查您的代码。 不,我使用此代码生成 Id,并且在 2016/10 之后,SqlCommand 始终返回 2016/9 并添加 1,因此我们始终得到 2016/10 你调试了吗? 显然他没有。 *** 可以替代您自己的工作。 因为该列是字符串。在 2016/9 之后,您插入了 2016/10。但随后的 SELECT TOP 1 .. 。 ORDER BY CodeBonLivraison DESC 仍会为您提供 2016/9。添加 1 并尝试 INSERT 会给你 pk 违规 【参考方案1】:

将您的查询更改为

select TOP(1) CodeBonLivraison 
from   BonLivraison 
ORDER BY convert(int,
                 right(CodeBonLivraison, charindex('/', reverse(CodeBonLivraison )) - 1)
                 ) DESC

【讨论】:

非常感谢@Squirrel 先生。非常感谢您的帮助【参考方案2】:

试试这样的:

select TOP(1) CodeBonLivraison 
from BonLivraison 
ORDER BY CAST(SUBSTRING(CodeBonLivraison, 6, LEN(CodeBonLivraison ) - 5) as int) DESC

【讨论】:

以上是关于在 SQL Server 和 C# 中获取最后插入的字符串 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ODBC 在 SQL Server 2000 中获取最后插入的 id?

SQL SERVER 2008 获取最后插入的值

VBA + SQL Server - 获取插入的最后一个 ID

使用 c# asp.net 获取 XML 数据并插入到 sql server

获取最后插入记录的 ID - Access DAO、ODBC、SQL Server 2008 身份字段

使用 C# 和 OPENJSON 将 JSON 插入 SQL Server 2016