4

我创建了一个数据库,我使用 uniqueidentifier 作为主键。我正在尝试运行最终看起来像这样的参数化查询。(插入 someTable (uniqueID) Values('76c14693-5475-4224-ba94-7d30c919ac59') (uniqueID 是我的 PK)。当我在 SQL Server Management Studio 中运行它时,此插入语句执行没有问题,但是,当我尝试从我的代码中运行它。

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

我查了一下,有很多关于打开 IDENTITY_INSERT 的建议,但它们都使用存储过程。我需要能够使用参数化查询来做到这一点。或者我需要一种方法来获取数据库中新创建的 guid。这似乎是每个人在某个时候都需要的东西。有没有简单的解决方案?

PS。我需要该 ID,因为我需要使用该 ID 将记录添加到其他表。

编辑:

这是有问题的表的结构

CREATE TABLE [dbo].[someTable]
( 
        [NewsID] [uniqueidentifier] NOT NULL CONSTRAINT [DF_someTable_NewsID] DEFAULT (newid()), 
        [ShortTitle] [nvarchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, 
        [DateCreated] [datetime] NULL CONSTRAINT [DF_someTable_DateCreated] DEFAULT (getdate()), 
        CONSTRAINT [PK_cmc_News_1] PRIMARY KEY CLUSTERED ( 
            [NewsID] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF
        ) ON [PRIMARY] 
) ON [PRIMARY]
4

4 回答 4

3

实际上,您必须有其他问题,或者您的表中有其他列,因为如果您的表中有 IDENTITY 列,并且 IDENTITY 列不能是数据类型 uniqueidentifier,您只会收到该错误 - 您确定吗? '正在插入到同一个表中,或者您没有使用某种试图为标识列指定特定值的 ORM 工具?也许您可以编写表格定义并附加它?

编辑:添加附加信息,因为问题现在包括架构。

看起来这个特定表中没有身份,所以我首先检查您是否在相关表上定义了任何触发器,并查看是否在另一个使用身份的表中进行了尝试插入......

于 2009-11-11T19:04:12.700 回答
0

首先,GUID 是主键的可怕选择。

但是,如果您使用它们,则不应将相同的字段定义为身份字段。请发布您的表结构代码,我们可以帮助您正确重新定义它。

于 2009-11-11T18:57:11.763 回答
0

问题是您不允许自己插入 ID(我认为这是因为引擎想要自己插入)。要打开此功能,您需要在查询之前执行此查询:

SET IDENTITY_INSERT <tablename> ON 
于 2009-11-11T18:58:03.920 回答
0

您已将字段的 Identity 属性设置为 On,这意味着数据库会在您插入记录时创建 ID。如果将字段的 Identity 设置为 Off,则可以在插入中设置值。

或者,让数据库创建 id,然后获取创建的 id:

insert into someTable ();select scope_identity()

注意:存储过程和参数化查询不是互斥的。我总是使用参数化查询调用存储过程。

于 2009-11-11T19:00:59.417 回答