问题标签 [identity-insert]

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 回答
413 浏览

sql-server - 如何替换表列 SQL 2008 中的 IDENTITY ID?

我不小心从表中删除了我的记录。该记录有一个键列,该键列与数据库中的其他一些表相关联。我已经恢复了数据库,并且可以访问之前删除的记录。当我尝试使用 INSERT SELECT 方法时,我收到消息'An explicit value for the identity column in table 'IEP.dbo.IEP' can only be specified when a column list is used and IDENTITY_INSERT is ON.'然后我在所有列上运行插入,但在我的表设计中,身份设置为“是”的第一列。现在我想知道有没有办法更新密钥?新记录自动生成新密钥,我想将该值更新为旧密钥。这是示例:

旧/当前表:

临时/备份表:

用临时列 i_key 值更新当前列 i_key 值的最佳解决方案是什么?如果有人可以提供帮助,请告诉我。谢谢!

0 投票
2 回答
1877 浏览

sql-server - SQL Server IDENTITY_INSERT 找不到对象“TableName”

当我在 java netbeans 中运行时:

我得到错误:

当 IDENTITY_INSERT 设置为 OFF 时,无法在表“TableName”中插入标识列的显式值

如果我运行:

我收到此错误:

找不到对象“TableName”,因为它不存在或您没有权限。

为什么会发生这种情况,我该如何解决?

0 投票
2 回答
1044 浏览

sql-server - 插入时生成身份插入错误(不在代码中)

我正在尝试使用以下代码构建表 - 创建表时没有错误,我可以看到结构,它显示IDENTITY_INSERT设置为ON.

尝试插入数据时出现以下错误(通过应用程序而不是通过代码)。

最后一个错误:数据库更新失败:
dataobject=

sqlca.sqlerrtext=SQLSTATE = 42000当 IDENTITY_INSERT 设置为 OFF 时
,SQL Server 的 Microsoft OLE DB 提供程序
无法在表 'lt_percent_cs' 中插入标识列的显式值。

没有对数据库进行任何更改。

插入 lt_percent_cs (id_key, customer_no, season, percent)
VALUES (54891, 80055514, 2017, 50)

sqlca.sqldbcode=544

sqlsyntax:
INSERT INTO lt_percent_cs (id_key, customer_no, season, percent) VALUES (54891, 80055514, 2017, 50)

行:1 [nvo_ds_database.uf_update.34 (544)]

我应该在 SQL Server Management Studio 中运行脚本时添加,它可以正常工作并且不会产生错误。

有什么想法吗?

0 投票
1 回答
516 浏览

sql-server - 通过 MVS 2015 ODBC IDENTITY_INSERT 创建 SSIS 包

今天,我试图弄清楚如何通过我正在使用 MVS 2015(使用 SSDT 14.0.61709.290)构建的 SSIS 包将标识列插入 Microsoft SQL 2016 数据库的行。我正在从另一个数据源中提取数据(可以正常工作),并且我正在将行插入到先前在目标 SQL 服务器上定义的目标表中,如下所示:

当我将值从数据源移动到新数据源时,出现错误:

[MSQL Deal [70]] 错误:发生打开数据库连接 (ODBC) 错误。状态:'23000'。本机错误代码:544。 [Microsoft][SQL Server Native Client 11.0][SQL Server]当 IDENTITY_INSERT 设置为 OFF 时,无法在表“TableName”中插入标识列的显式值。

搜索时出现大量论坛和结果,表明在修改目标的列映射页面时应该有一个允许身份插入的复选框。此选项不存在,并且 MVS/SSDT 2015/2017 中的“高级编辑器”界面仅具有列映射,没有用于处理标识列插入的选项。

此外,我还尝试在我的控制流中添加一个步骤来打开身份插入,但由于某种原因,在此级别启用 IDENTITY_INSERT 不起作用,并且我的包在所有插入尝试中仍然失败。

现在我将完全诚实,我完全意识到我有其他选择来让它工作 - 但请记住,我正在构建开发测试和生产数据库,我试图保持脚本化和自动化以及白痴证明它进一步走向部署。我不想引入一个中间步骤,迫使我们的一个 DBA 等待第一个 SSIS 包完成,运行一个 SQL 查询,该查询将为特定表启用身份插入,运行下一个包,然后运行查询以禁用身份插入。我必须这样做很多次......

SSIS 2015(我尝试使用 MVS/SSDT 2017)是否完全放弃了对身份插入的支持?我是否必须对我的 DSN 使用不同的接口才能使其正常工作(ODBC?)?

这仍然是一个选项,但它隐藏在某个地方真的非常非常好?

0 投票
2 回答
803 浏览

entity-framework - 更新实体时无法为标识列插入显式值

我正在使用 ASP.NET 样板模板。

我想更新Details包含多个项目的表。如果一个条目存在,它必须更新,否则必须添加一个新条目,并且必须删除表中与Master主键相关的所有其他条目。Details但它显示一个错误:

当 IDENTITY_INSERT 设置为 OFF 时,无法在表“SemesterDetails”中插入标识列的显式值

这是Master表格:

这是Details表,由StudentSemesterCore类表示:

这是Update代码:

SaveChanges调用时显示错误。实际上,如果存在相同的值,我想更新详细信息,否则添加新的并且StudentDegreeID必须删除与之相关的所有其他数据。

0 投票
1 回答
538 浏览

sql-server - SQL Server 从 XML 路径中删除尾随逗号

我有以下代码可以在我的给定表中提取我的列的名称:

我想把它放到我当前的查询中:

我自己尝试过以下操作:

但是,我得到了以下错误:

消息 156,级别 15,状态 1,第 4 行
关键字“SELECT”附近的语法不正确。

消息 102,级别 15,状态 1,第 8 行
')' 附近的语法不正确。

消息 102,级别 15,状态 1,第 16 行
',' 附近的语法不正确。

不确定该错误是由添加到 XML 路径输出中的额外逗号调用还是由其他原因调用?

我的完整存储过程如下所示:

上面的 SP 是我目前收到此错误的原因:

只有在使用列列表并且 IDENTITY_INSERT 为 ON 时,才能为表 'maintReq' 中的标识列指定显式值。

感谢@Pரதீப்,这是最终的工作查询代码:

0 投票
2 回答
1347 浏览

sql-server - 会话关闭时 identity_insert 是否重置为 OFF?

SQL 服务器问题。虽然我的测试说“是”,但我宁愿从有经验的人那里听到。

当我使用 SET IDENTITY_INSERT some_table ON 时,我想知道我可以安全地关闭我的会话,而不必担心忘记将其设置为关闭,从而给其他用户带来麻烦。

0 投票
2 回答
1580 浏览

sql - 使用起始值设置 Identity_insert ON

我在 SQL Server 上工作,我想将一些行从 tableA 复制到包含 MyColumnID 的 tableB。

因此,在我想要的新表上(在复制之前)将 Identity_insert tableB 设置为 ON,最后使用 IDENTITY(500,1) 将 Identity_insert tableB 设置为 OFF。

下面是我的代码:

我知道最后一行是不正确的。有人能帮我吗?

0 投票
0 回答
171 浏览

sql-server - EF6 数据库中的身份插入优先

我正在尝试将旧数据库中的数据转换为新数据库,其中主键的值很重要。

我目前拥有的代码是这样的(实际表名替换为“TableName”):

我确实为主键明确分配了一个值。

但我得到了例外:

“当 IDENTITY_INSERT 设置为 ON 或复制用户插入 NOT FOR REPLICATION 标识列时,必须为表 'TableName' 中的标识列指定显式值。”

我尝试在 foreach 循环中进行实际的数据库调用(IDENTITY_INSERT 和 SaveChanges()),但问题仍然存在。

我能够为这个问题找到的答案都是代码优先的。

0 投票
1 回答
160 浏览

c# - 使用 EF 代码优先迁移仅为初始数据插入身份

我目前正在尝试将一些本地数据引入使用 EF Code-First 迁移的数据库中。这些数据已经具有唯一的 id,因此最初应该按原样插入第一组数据。

现在我正在考虑首先设置'DatabaseGeneratedOption.None',将数据集添加到数据库中,计算最后使用的ID,使用T-SQL命令'dbcc checkident(tablename,reseed,[NEW AUTO ID] )',然后在将 GeneratedOption 重置为 'DatabaseGeneratedOption.Identity' 时添加另一个迁移。

这是正确的方法和/或什至可能,还是我走错了路?

任何线索将不胜感激
最好的问候

编辑 - 迈克尔斯回答

试图实现 Michals 的答案,但 ID 仍然由数据库“生成”,并且我的显式值被忽略。也许这是我插入值的方式:

解决方案 /w Michals 答案

好吧,我尽我最大的努力以不同的方式实现 Michals 的答案,最后得出了一个(非常奇怪的)解决方案。

首先,我有我的 DBContext 类和一个名为 DBContextEditor 的衍生类。所做的只是在我更改所有“身份”属性的地方覆盖 OnModelCreating。

将此类与其他帖子(下面的来源)中的其他一些技术结合使用,最终给了我想要的结果。
最后我有这样的事情:

我还尝试实现对 MyContext 类的覆盖,该类以错误结尾说“烘焙模型不同......”这也将 ID 属性更改为不再是“身份”。

最后,这种方法让我可以控制添加身份数据,同时保持生成身份值的可能性。此外,任何进一步的迁移都不会更改模型,也不会删除“身份”标志,而 [DatabaseGeneratedOption] 确实删除了它。也可以并建议将其存储在 using 中,如下所示:

仅供参考伪代码中的模型

相关帖子和来源