使用uniqueidentifier作为主键,并使用参数化查询从客户端应用程序插入它

时间:2009-11-11 18:51:39

标签: sql insert guid uniqueidentifier

我创建了一个数据库,我使用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]

4 个答案:

答案 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()

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