gpt4 book ai didi

c# - 我将 IDENTITY_INSERT 设置为 ON 但我收到一个 SqlException 说它已关闭

转载 作者:行者123 更新时间:2023-11-30 20:13:02 25 4
gpt4 key购买 nike

我试图从一个文本文件中获取数千张发票(和其他东西)并将它们插入到 SQL Server 2008 中。我编写了一个小控制台应用程序来执行此操作,它使用 LINQ to SQL。插入所有现有发票后,我希望 Invoice_ID 成为标识列并自动递增,因此我将其设计为:

CREATE TABLE [dbo].[Invoice]
(
[Invoice_ID] int IDENTITY(1,1) NOT NULL PRIMARY KEY,
/* Other fields elided */
)

在我开始插入发票之前,我调用了一个包含以下行的存储过程:

SET IDENTITY_INSERT [dbo].[Invoice] ON;
/* Other lines for setup elided */

提交更改后,我使用以下行调用另一个存储过程:

SET IDENTITY_INSERT [dbo].[Invoice] OFF;
/* Other lines for clean up elided */

当我尝试插入发票并提交更改时,出现以下异常:

SQLException: Cannot insert explicit value for identity column in table 'Invoice' when IDENTITY_INSERT is set to OFF.

我运行了 SQL Profiler,我可以看到它确实在尝试执行插入之前将 IDENTITY_INSERT 设置为 ON。我没有看到它在任何地方被设置为 OFF。我是 SQL Profiler 的新手,所以也许我可以启用一个事件,它会为我提供更多信息来尝试和调试它。有任何想法吗?

我试过调整 LINQ to SQL 使用的 .dbml 文件中的值。我将 Invoice 表的 Auto Generated Value 设置为“False”,将 Auto-Sync 设置为“Never”,并将 Server数据类型 设置为“Int NOT NULL”。通常我会将它们分别设置为“True”、“On Insert”和“Int NOT NULL IDENTITY”,但是当我这样做时,我可以看到 SQL Server 正在执行:

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]

而不是插入我提供的 Invoice_ID

最佳答案

http://msdn.microsoft.com/en-us/library/ms190356.aspx

如果你往下看,你会看到:

If a SET statement is run in a stored procedure or trigger, the value of the SET option is restored after control is returned from the stored procedure or trigger. Also, if a SET statement is specified in a dynamic SQL string that is run by using either sp_executesql or EXECUTE, the value of the SET option is restored after control is returned from the batch specified in the dynamic SQL string.

关于c# - 我将 IDENTITY_INSERT 设置为 ON 但我收到一个 SqlException 说它已关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1977845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com