问题标签 [identity-column]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3542 浏览

sql - 如何在 MS-Access 中检索最后一个自动增量值,如 Sql Server 中的@@Identity

我想从自动增量列中检索 ms 访问中的标识列值。基本上我正在运行一个事务,其中我必须编写两个插入查询。第二个查询将包含从查询 1 生成的自动增量值。我该怎么做?

0 投票
6 回答
2471 浏览

sql-server - 带有标识字段的表:获取已删除记录的 ID 的最佳 SQL 查询?

我有一个带有标识字段的表。从该表中获取所有已删除记录的 ID 的最佳 SQL 查询是什么?

0 投票
4 回答
26414 浏览

sql-server - 在 SQL Server 中更改身份种子(永久!)

有没有办法永久更改身份列的身份种子?使用 DBCC CHECKIDENT 似乎只是设置了 last_value。如果表被截断,所有值都会被重置。

返回

我希望一些语法像

会存在。

是否有必要创建一个新列,移动值,删除原始列并重命名新列?

0 投票
2 回答
8464 浏览

sql-server-2005 - @@IDENTITY vs SCOPE_IDENTITY() vs IDENT_CURRENT [sql server 2005]

我应该使用哪个来获取 sql server 2005 中最后插入的记录 ID?

我搜索了stackoverflow,我发现了这个,

SQL:如何获取我刚刚插入的值的 id?

最佳答案评论:

sql server 2005 中存在 SCOPE_IDENTITY() 的已知错误,不确定 2008 年,如有必要,OUTPUT 子句可以返回一组 ID...

我正在使用 sql server 2005 ...任何建议

0 投票
5 回答
5266 浏览

sql-server - 我可以让一个标识字段跨越 SQL Server 中的多个表吗?

我可以让一个“身份”(唯一的、非重复的)列跨越多个表吗?例如,假设我有两个表:Books 和 Authors。

BookID 列和 AuthorID 列是标识列。我希望标识部分跨越两列。所以,如果有一个值为 123 的 AuthorID,那么就不可能有一个值为 123 的 BookID。反之亦然。

我希望这是有道理的。

这可能吗?

谢谢。

我为什么要这样做?我正在编写一个 APS.NET MVC 应用程序。我正在创建一个评论部分。作者可以发表评论。书籍可以有评论。我希望能够将实体 ID(书籍 ID 或作者 ID)传递给操作,并让操作拉出所有相应的评论。该动作不会关心它是一本书还是作者或其他什么。听起来合理吗?

0 投票
5 回答
770 浏览

sql-server-2008 - SQL Identity 列增加 2 或 3

我有一个新的集群数据库,我一直在将数据从旧数据库移到表中。当我导入数据时,一切正常,但是当我手动插入记录时,身份列不跟随下一个身份号码。因此,例如,我将 100 条记录导入表中,身份列显示 1-100,但如果我随后手动向数据库添加一行,我将得到 102 或 103,而不是 101。

任何想法为什么会发生这种情况?

它发生在我所有的桌子上,并且变得非常令人沮丧,因为有时身份之间的差距高达 4 或 5。

0 投票
3 回答
882 浏览

sql - SQL SERVER 2008 中的复合 IDENTITY 列

  • Orders 表有一个 CustomerId 列和一个 OrderId 列。
  • 由于某些原因,订单的 ID 不超过 2 个字节很重要。
  • 总共将有几百万个订单,这使得 2 个字节对于全局订单 ID 来说是不够的。
  • 一个客户将有不超过几千个订单,使得 2 字节就足够了。
  • 显而易见的解决方案是让 (CustomerId, CustomerOrderNumber) 是唯一的,而不是 OrderId 本身。

问题是生成下一个CustomerOrderId。最好不要为每个客户创建单独的表(即使它只包含一个 IDENTITY 列),以保持解决方案的上层简单。

问:如何生成下一个 OrderId 以使 (CustomerId, CustomerOrderId) 是唯一的,但允许 CustomerOrderNumber 本身有重复?Sql Server 2008 是否具有执行此操作的内置功能?

由于没有更好的术语,我将其称为 Compound IDENTITY 列。

0 投票
1 回答
1682 浏览

sql-server-2005 - 在 DataAdapter.Update/Refresh 后未设置 DataTable 标识列,使用“而不是”触发器(SqlServer 2005)

在我们的单元测试中,我们使用普通的 ADO.NET(DataTable、DataAdapter)来准备数据库。检查结果,而测试的组件本身在 NHibernate 2.1 下运行。.NET 版本是 3.5,SqlServer 版本是 2005。

数据库表将标识列作为主键。一些表应用而不是插入/更新触发器(这是由于向后兼容性,我无法更改)。触发器通常是这样工作的:

ADO.NET DataAdapter 发出的插入语句(由瘦 ADO.NET 包装器即时生成)尝试将标识值检索回 DataRow:

但是 DataRow 的 id-Column 仍然为 0。当我暂时删除触发器时,它工作正常 - id-Column 然后保存数据库设置的标识值。

另一方面,NHibernate 使用这种插入语句:

这行得通,NHibernate POCO 在刷新后立即正确设置了其 id 属性。这对我来说似乎有点违反直觉,因为我希望触发器在不同的范围内运行,因此 @@identity 应该比 scope_identity() 更适合。

所以我认为没问题,我也会在 ADO.NET 下应用 scope_identity() 而不是 @@identity。但这没有任何效果,DataRow 值仍然没有相应地更新。

现在最好的部分是:当我将这两个语句从 SqlServer 分析器复制并粘贴到 Management Studio 查询中(包括“exec sp_executesql”)并在那里运行它们时,结果似乎是相反的!ADO.NET 版本在那里工作,而 NHibernate 版本不工作(选择 scope_identity() 返回 null)。我多次尝试验证,但无济于事。好吧,实际上这正是我所期望的——@@identity 没问题,而 scope_identity() 失败了。

当然,在 Management Studio 中调用它只会显示来自数据库的结果集,无论 NHibernate 和 ADO.NET 内部发生什么,都是另一个话题。此外,T-SQL SET 定义的几个会话属性在两个场景中是不同的(Management Studio 查询与运行时的应用程序)

这对我来说是一个真正的难题。我会很高兴对此有任何见解。谢谢!

0 投票
1 回答
387 浏览

c# - 将列映射为 db 中的 IDENTITY

虽然我已经用 标记了我的 ID 列.Identity(),但生成的数据库架构没有IDENTITY设置为 true,这在我添加记录时给我带来了问题。如果我手动编辑数据库架构(在 SQL Management Studio 中)以将Id列标记为IDENTITY,那么一切都会按我的意愿进行 - 我不能让 EF 自己做到这一点。

这是我的完整映射:

当我使用 EF 构建和重新构建数据库以进行集成测试时,我真的需要自动完成此操作......

编辑: 嗯......在评论中,我被要求提供足够的代码来执行这个,所以我将我的代码剪切并粘贴到一个控制台应用程序中(这样你就不需要我所有的课程......)突然间刚刚工作。我想我在某处忘记了一些方法调用,尽管我无法弄清楚在哪里。

我将在此帖子的答案中发布有效的解决方案代码,以防其他人来寻找它。

0 投票
3 回答
5667 浏览

sql - SQL 身份列

我有一个基本上是一个语句的 sql 表。

现在假设我在表中的记录有一个日期和一个身份列,该列是自动编号的,并定义了交易在前端显示给客户端的顺序。

问题是在插入过程中,一些数据丢失了,两个日期之间的一些交易丢失了。

我需要将数据插入到表中,但我需要在日期之间而不是在表的末尾插入它们。如果我进行正常插入,数据将出现在表的末尾而不是我指定的日期,因为标识列是自动编号的,并且无法更新。