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

c# - 尽管标识列设置为自动递增,但将数据插入到 datagridview 时出现 NoNullAllowedException 错误

我在我的程序中放置了一个 DataGridView,这样这个 DataGridView 对应于一个表的数据集,并且该表具有一个自动递增的标识列(此外,该列设置为主键)。

此标识列在 DataGridView 中不可见,当用户填充其他单元格并单击“保存”时,会发生NoNullAllowedException

为什么?我想让用户只插入数据(而不是其他修改)

我该怎么办?我使用 C# 和 SQL server 2008

干杯

0 投票
1 回答
1050 浏览

sql - 在 SQL Server 2008 中,我应该如何将数据从数据库复制到另一个数据库?

我正在尝试编写一个存储过程来将一组表中的数据子集复制到不同数据库中的一组相同表中。“源”数据库需要是存储过程的参数。

我已经为此苦苦挣扎了两天,我认为我有一个很好的解决方案:

  1. 验证模式是否相同。
  2. 使用动态 SQL 为源表创建临时“rmt”同义词。
  3. 使用 INSERT INTO A SELECT * FROM rmtA WHERE <条件>复制数据
  4. 删除同义词。

这对于大多数表来说效果很好,但是对于包含标识列的表,我不仅被迫设置 IDENTITY_INSERT ON & OFF,而且更糟糕的是,我不能使用 SELECT *; 我必须明确指定所有列。如果我稍后添加或删除列,这将是一场噩梦。

我必须得到一些东西,所以我现在要使用这个解决方案,但我想认为在某个地方有更好的解决方案。

帮助?

0 投票
7 回答
20055 浏览

sql - 带有前导填充零的 SQL 标识

我已在表中将一列标记为身份

我需要将标识列递增为001,002,003等。

数据库显示它正在插入 as1,2,3等。

如何才能做到这一点?

0 投票
5 回答
1744 浏览

sql-server - SQL Server - 允许 UPDATE 语句的自动增量

在我的数据库中添加项目时,我需要它来自动确定字段 DisplayOrder 的值。Identity(自动增量)将是一个理想的解决方案,但我需要能够以编程方式更改(更新)DisplayOrder 列的值,而 Identity 似乎不允许这样做。目前,我使用以下代码:

这是做到这一点的好方法还是有更好/更简单的方法?

0 投票
2 回答
415 浏览

sql - 插入具有标识列的表

我正在尝试使用 wpf 中的实体框架向具有标识列和三个“普通”列的表中插入一行。但是我收到此错误消息:当 IDENTITY_INSERT 设置为 OFF 时,无法在表“MyTable”中为身份列插入显式值这是我的代码片段,试图添加到具有姓名、姓氏、年龄和用户 ID(身份)的用户表中柱子:

谁能帮我解决这个问题?

0 投票
4 回答
447 浏览

sql - Sql Server Legacy Database To Clustered index 与否

我们有一个遗留数据库,它是一个 sql server db(2005 和 2008)。

表中的所有主键都是唯一标识符。

这些表目前没有在它们上创建聚集索引,并且我们在只有 750k 记录的表上遇到了性能问题。这是我使用的第一个使用唯一标识符作为唯一主键的数据库,我从未见过 sql server 在返回数据时如此缓慢。

我不想在 uniqueidentifier 上创建聚集索引,因为它们不是顺序的,因此在插入数据时会减慢应用程序的速度。

我们无法删除用于远程站点记录身份管理目的的唯一标识符。

我曾考虑向表中添加一个大整数标识列,并在该列上创建聚集索引并包括唯一标识符列。

IE

int identity - 保持插入速度的第一列唯一标识符 - 确保应用程序按预期工作。

目标是提高标识查询和联接表查询性能。

Q1:这会提高数据库的查询性能还是会减慢它的速度?

Q2:有没有我没有列出的替代品?

谢谢皮特

编辑: 性能问题是通过选择语句快速检索数据,特别是如果一些更多的“事务/更改”表连接在一起。

编辑2:表之间的连接通常都在主键和外键之间,对于具有外键的表,它们包含在非聚集索引中以提供更多覆盖索引。

这些表都没有其他可以提供良好聚集索引的值。

我更倾向于在每个高负载表上添加一个额外的标识列,然后在聚集索引中包含当前的 Guid PK 列以提供最佳查询性能。

编辑 3:我估计 80% 的查询是通过数据访问机制单独对主键和外键执行的。通常,我们的数据模型具有延迟加载的对象,这些对象在访问时执行查询,这些查询使用对象 id 和 PK 列。我们有大量用户驱动的数据排除/包含查询,它们使用外键列作为过滤器,基于类型 X 的标准排除以下 id。剩下的 20% 是枚举 (int) 或日期范围列的 where 子句,系统中执行的基于文本的查询很少。

在可能的情况下,我已经添加了覆盖索引来覆盖最重的查询,但到目前为止我仍然对性能感到失望。正如 bluefooted 所说,数据被存储为堆。

0 投票
1 回答
196 浏览

sql - SQL表函数或方法来判断标识列是否已被使用?

我很好奇如果表中没有数据,是否有办法判断 IDENTITY 列是否已增加。(即数据项被插入,然后被删除)

0 投票
6 回答
5368 浏览

sql-server - 非标识列上的聚集索引以加快批量插入?

我的两个问题是:

  • 我可以使用聚集索引来加速大表中的批量插入吗?
  • 如果我的 IDENTITY 列不再是聚集索引,我还能有效地使用外键关系吗?

详细地说,我有一个数据库,其中包含几个非常大的(100-10 亿行之间)表,其中包含公司数据。通常在这样的表中有大约 20 到 40 家公司的数据,每家公司都是由“CompanyIdentifier”(INT)标记的自己的“块”。此外,每家公司都有大约 20 个部门,每个部门都有自己的“子块”,用“部门标识符”(INT) 标记。

经常会从表中添加或删除整个“块”或“子块”。我的第一个想法是在这些块上使用表分区,但由于我使用的是 SQL Server 2008 标准版,因此我无权使用它。尽管如此,我的大多数查询都是在“块”或“子块”上执行的,而不是在整个表上执行的。

我一直在努力针对以下功能优化这些表:

  1. 在子块上运行的查询
  2. 在整个表上运行的“基准测试”查询
  3. 插入/删除大块数据。

对于1)和2)我没有遇到很多问题。我已经在关键字段上创建了几个索引(还包含有用的 CompanyIdentifier 和 DepartmentIdentifier)并且查询运行良好。

但是对于 3) 我一直在努力寻找一个好的解决方案。我的第一个策略是始终禁用索引,批量插入一大块并重建索引。一开始这个速度很快,但是现在数据库里有很多公司,每次重建索引都需要很长时间。

目前,我的策略已更改为仅在插入时保持索引打开,因为现在这似乎更快。但我想进一步优化插入速度。

我似乎注意到通过添加在 CompanyIdentifier + DepartmentIdentifier 上定义的聚集索引,将新“块”加载到表中更快。在我放弃此策略以支持在 IDENTITY 列上添加聚集索引之前,正如几篇文章向我指出的那样,聚集索引包含在所有其他索引中,因此聚集索引应该尽可能小。但现在我正在考虑恢复这种旧策略以加快插入速度。我的问题是,这是否明智,或者我会在其他领域遭受性能打击?这真的会加快我的插入速度还是只是我的想象?

我也不确定在我的情况下是否真的需要一个 IDENTITY 列。我希望能够与其他表建立外键关系,但我也可以为此使用 CompanyIdentifier+DepartmentIdentifier+[uniquifier] 方案吗?或者它必须是一个表范围的、碎片化的 IDENTITY 编号?

非常感谢任何建议或解释。

0 投票
2 回答
745 浏览

inheritance - 如何向 EntityDataModel (EF 4) 中定义的对象添加继承?

我在 EF 模型中定义了一个简单的 2 对象继承,Person <- User。

Person 是基础实体/类,它不是抽象的,它包含名字、姓氏、电子邮件等字段。

User 是派生的实体/类,包含用户名、lastlogin、islockedout 等字段。

数据库使用每个类型的表模式,因此有一个表用于人员,另一个表用于用户。两者都使用相同的主键字段 PersonID。PersonID 是一个 IDENTITY 列,但在 EDM 中,PersonID 的 StoreGeneratedPattern 设置为 None。

因为这是一个 table-per-type 继承模式,所以可能有一个 Person 行/对象没有对应的 User 行/对象。这样系统就可以包含关于非用户的数据。但是,一个人最终可能会成为用户,这就是我遇到问题的地方。

我有一个针对这种情况的测试用例,其中系统找到了一个想要变成用户的人。我尝试在新的用户对象上设置 PersonID 字段,将其添加到 ObjectContext 并保存更改。发生的情况是数据库创建了一个新的 Person 行以及新的 User 行,而忽略了我为 PersonID 设置的值。

我怎样才能解决这个问题?我是否必须创建存储过程来处理 EDM crud 操作?

0 投票
7 回答
4721 浏览

sql-server - “每个表只能有一个 IDENTITY 列” - 为什么?

“每张表只能有一个 IDENTITY 列”

为什么会这样?以车辆为例,存在唯一的底盘号和唯一的注册号。为了在sql server中描述这个场景,我们需要一个自定义的实现。相反,在Oracle中,您可以在一个表上拥有任意数量的序列。为什么对 IDENTITY 列有限制,有什么具体原因吗?

拥有车辆模式的场景是虚构的,我在质疑自己为什么对身份列有限制。