1

我在 Visual Studio - VB.NET 中工作。

我的问题是我想删除 SQL Server 中的特定行,但我拥有的唯一唯一列是自动递增的标识。

我的工作过程:
1.我在列中添加一行(标识正在递增,但我不知道数字)
2.我想删除上一行

每条新记录都有一个唯一的 ID 吗?我的表可能有 2 条完全相同的记录,只是顺序(身份)不同。

任何想法如何处理这个问题?

4

2 回答 2

6

SQL Server有一些函数可以返回为最后一行生成的 ID,每个函数都有自己的特定优势和劣势。

基本上:

  • @@IDENTITY如果您不使用触发器,则可以使用
  • SCOPE_IDENTITY()适用于您明确调用的代码。
  • IDENT_CURRENT(‘tablename’)适用于所有范围内的特定表。

在几乎所有情况下SCOPE_IDENTITY()都是您需要的,并且使用它是一个好习惯,与其他选项相反。此处
还提供了有关这些方法的优缺点的很好的讨论。

于 2013-01-08T08:42:38.487 回答
3

我想删除上一行

那是你的问题。SQL 中没有“前一行”这样的概念。前面这个词意味着顺序,顺序仅适用于查询,通过添加 ORDER BY 子句来实现。表没有顺序。您需要将其改写为“我需要删除满足 <t​​his> 条件的记录。”。这听起来像是迂腐的胡言乱语,但在你承认问题之前,你永远不会找到解决方案。

寻找一种方法来解释插入的标识列的值,然后从中减去 1,这是有很多问题的。在并发下是不正确的。存在回滚时这是不正确的。在 ETL 作业之后它是不正确的。总体而言,永远不要期望单调增加的身份,它们可以自由地跳过间隙,并且您的代码在存在间隙时应该是正确的。

于 2013-01-08T10:15:40.337 回答