问题标签 [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 投票
4 回答
351 浏览

sql - 重新插入具有标识列的行

我正在 SQL Server (2008 R2) 中实现一个队列,其中包含要执行的作业。完成后,作业将移至历史表,设置成功或失败标志。队列表中的项目有一个标识列作为主键。历史队列具有此 id 和时间戳的组合作为 PK。

如果作业失败,我希望选择重新运行它,并且他们认为这是将其从历史记录表移回实时队列。出于可追溯性的目的,我希望重新插入的行具有与原始条目相同的 ID,这会导致问题,因为这是一个标识列。

我看到两种可能的解决方案:

1) 使用 IDENTITY_INSERT:

2) 创建一些自定义逻辑来生成唯一 ID,例如从实时队列和历史队列中获取最大 ID 值并添加一个。

我没有看到 2 有任何真正的问题,除了它很乱,可能性能很差,而且它让我神经质的皮肤爬行......

选项 1 我喜欢,但我不太清楚其中的含义。这将如何表现?而且我知道同时对两张桌子这样做会使事情崩溃和燃烧。如果两个线程同时对同一张表执行此操作会发生什么?

对于半常用的存储过程来说,这是否是一种很好的方法,或者这种技术是否应该只用于在蓝月亮中批量插入数据?

关于哪个是最好的选择,或者有更好的方法有什么想法吗?

0 投票
5 回答
112 浏览

sql - 是否有一种聪明的方法可以将数字附加到关系数据库中的 PK 标识列而不会造成总灾难?

这远非理想情况,但我需要通过将数字“1”附加到与其他四个表具有 FK 关系的 PK Identiy 列来修复数据库。我基本上是把一个四位数的数字变成一个五位数的数字。我需要维持关系。我可以将数字存储在 var 中,执行 Set 查询并附加 1,然后为每个表执行此操作...

有没有更好的方法来做到这一点?

0 投票
2 回答
2141 浏览

c# - 使用 LINQPad 将实体插入带有标识列的 SQL Compact 4 表中

我正在尝试使用 LINQPad 将新记录插入到 SQL CE 4 数据库中,并且遇到表的身份问题。假设我有这个简单的表格,例如:

我可能以错误的方式做事,但我在 LINQPad 中尝试过

但我得到一个 SqlCeException 说明

我可以用 SQL 很好地插入一条记录,它可以在 SQL CE 或其数据提供程序没有错误的情况下工作,并且 SQL CE 为我设置了 Id 列,这就是我想要的

我还缺少另一个步骤吗?我什至不确定它是否是 LINQPad 问题,但我想我还是会问,因为这就是我现在正在尝试使用此代码的原因。

0 投票
7 回答
29512 浏览

entity-framework - 在实体框架中,插入后获取标识列的值

我正在使用 EF4。我想在数据库中插入一个新的 MyObject。MyObject 有两个字段:

ID:int(身份)和名称:字符串

正如我在文档中看到的那样,Entity Framework 应该在调用 SaveChanges() 后将 MyObject.Id 设置为数据库生成的值,但在我的情况下这不会发生。

更新:

这发生在我的一个实体中,其他实体工作正常。顺便说一句,我检查了 DB 列是身份,StoreGeneratedPattern 设置为身份。这是SSDL。我看不出有什么不同。第一个工作不正常:

更新在数据库中成功完成并生成了身份,但实体对象并未使用新身份进行更新。

0 投票
3 回答
2150 浏览

sql-server - 触发器是否能够复制作为身份 ID 的主键?

我想INSERT在表格中立即X将该记录复制到另一个History表格中。

现在该表将主键作为Identity列,因此该记录在实际插入之前不会有主键 id。

我的问题是,如果我trigger在此记录上进行操作,我会获得该记录的身份 ID 还是仍为空白?

0 投票
2 回答
306 浏览

sql - 将 ColdFusion 应用程序生成的标识值插入 iSeries 表的最佳方法是什么?

我正在使用没有自动递增标识列的数据库(iSeries)。因此,我必须在应用程序中即时生成 ID。

我有一个用户定义的函数可以为我完成这项工作,因为我需要为几个表生成这些 ID:

(我知道这不是很安全,但这只是为了让它现在在他的开发环境中工作。)

我的问题是,从 INSERT 语句中调用函数的好处/缺点是什么,而不是在本地保存 ID 值:

  1. 在 INSERT 语句中生成 ID

    /li>
  2. 在 INSERT 语句之前生成 ID

    /li>

我倾向于第一个选项,因为 ColdFusion 将准备语句并立即执行它,而不是在本地存储值,然后让 ColdFusion 准备 SQL 语句。

有什么区别吗?

0 投票
4 回答
2233 浏览

c# - SQL Server - 格式化的标识列

我想在格式为 FOO-BAR-[标识号] 的表中有一个主键列,例如:

SQL Server 可以做到这一点吗?还是我必须使用 C# 来管理序列?如果是这种情况,我怎样才能使用 EntityFramwork 获得下一个 [identity number] 部分?

谢谢

编辑:

我需要这样做是因为此列表示发送给客户的通知的唯一标识符。

  • FOO 将是一个常量字符串
  • BAR 将根据通知的类型(检测、警告或强制执行)而有所不同

那么只有一个 int 标识列并在 C# 的业务逻辑层中附加值会更好吗?

0 投票
2 回答
68 浏览

sql-server - 当前插入行的标识

我正在做一个项目,但问题出现了:插入语句可以将它自己的身份插入另一个字段吗?

这个想法是记录的层次结构,并且“父”字段将指向父记录的ID,而给定树的“顶部”记录将仅指向其自身。

我们当然可以将它留给父级,或者稍后返回并插入它的 ID。但我想知道在插入记录时是否有任何 SQL Server 操作将 IDENTITY 插入另一个字段?

编辑:或者有没有办法将一个字段的默认值指定为另一个字段的值?这也将解决这个问题。

编辑:默认字段是另一个字段似乎已经得到回答,答案是否定的,使用触发器。当然,这无助于约束和非空字段的问题。(http://social.msdn.microsoft.com/Forums/en/sqltools/thread/661d3dc8-b053-47b9-be74-302ffa11bf76

0 投票
2 回答
2818 浏览

c# - 当我尝试保存新记录或更新现有记录时,EF 返回 0000-0000-0000-xxx 作为 Guid?

我在我的 C# 项目中使用 EF4。我面临的问题是,当我尝试保存记录时,我得到主键违规并且 PK 值为“0000-0000-0000-xxx”。根据我的猜测,EF 无法识别 IsIdentity 标志并生成 guid 值。在我的表的 SQL Server 数据库中,我指定了一个 PK(uniqueidentifier>guid) 并将其设置为 IdentityColumn,因此我希望这会传递到我的项目中,因为 guid 是在 SQL Server 中生成的。有没有办法克服这个错误?

0 投票
1 回答
2062 浏览

sql - 插入具有自动递增 ID 的表时保持外键关系

我有两个表:缺陷和缺陷数据。每个缺陷可能有也可能没有一个或多个 DefectData。因此,DefectData 有一个 DefectId 列作为外键。

两个表中的 Id 都是一个自动递增的标识。

我遇到的问题是,当我想插入一个新的 Defect 及其 DefectData 时,首先插入 Defect 并获取一个 Id,但我不知道该 Id 将提供给 DefectData 什么。我的解决方案是然后从匹配插入数据的缺陷中进行选择以获取 Id。

  1. 插入缺陷
  2. 获取该缺陷的 ID
  3. 插入 ID 为 2 的缺陷数据(零个或多个)。

设置 IdentityInsert 然后使用我自己的 Id 插入将不起作用,因为这是由网络服务器运行的,并且可能有并发调用(我在这里吗?)。

图表

提前致谢。