我创建了一个数据库,我使用uniqueidentifier作为主键。我正在尝试运行参数化查询,最终看起来像这样。 (插入someTable(uniqueID)值('76c14693-5475-4224-ba94-7d30c919ac59')(uniqueID是我的PK)。当我在SQL Server Management Studio中运行它时,这个insert语句执行没有问题,但是当我运行时它失败了尝试从我的代码中运行它。
错误:当IDENTITY_INSERT设置为OFF时,无法在表'someTable'中为identity列插入显式值。
我已经查了一下,关于打开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]
答案 0 :(得分:3)
实际上,您必须遇到其他一些问题,或者您的表中有其他一些列,因为如果表中有IDENTITY列,并且IDENTITY列不能是数据类型uniqueidentifier,则只会出现该错误 - 是你确定要插入同一个表,或者你没有使用某种试图为标识列指定特定值的ORM工具?也许您可以编写表格定义脚本并附加它?
编辑:添加其他信息,因为现在问题包括架构。
看起来这个特定的表中没有标识,所以我首先检查一下你是否在相关表上定义了任何触发器,看看是否在另一个使用标识的表中发生了尝试插入...
答案 1 :(得分:0)
首先,GUID区域是主键的一个可怕选择。
但是,如果您正在使用它们,则不应将相同的字段定义为标识字段。请发布您的表格结构代码,我们可以帮助您正确地重新定义它。
答案 2 :(得分:0)
问题是你不能自己插入一个ID(我认为这是因为引擎想要自己做)。要启用此功能,您需要在查询之前执行此查询:
SET IDENTITY_INSERT <tablename> ON
答案 3 :(得分:0)
您已将字段的Identity属性设置为On,这意味着数据库在插入记录时会创建id。如果为该字段将“标识”设置为“关”,则可以在插入中设置值。
或者,让数据库创建id,然后获取创建的id:
insert into someTable ();select scope_identity()
注意:存储过程和参数化查询不是独占的。我总是使用参数化查询来调用存储过程。