标识列必须是数据类型为int,BIGINT,SMALLINT TINYINT,十进制,或数字的(Th

2019-10-18 11:49发布

我已经在Visual Studio 2012中创建一个数据库项目,设置为“Windows Azure的SQL数据库”目标平台。 我添加了一个表,如:

CREATE TABLE [dbo].[Organization]
(
    [Id] UNIQUEIDENTIFIER NOT NULL PRIMARY KEY NONCLUSTERED IDENTITY, 
    [Name] NVARCHAR(100) NOT NULL, 
    [CreationDate] DATETIME NOT NULL DEFAULT GetDate()
)

GO

CREATE CLUSTERED INDEX [IX_Organization_CreationDate] ON [dbo].[Organization] ([CreationDate])

但它一直在抱怨:

Error   1   SQL71518: The identity column '[dbo].[Organization].[Id]' must be of data type int, bigint, smallint, tinyint, decimal, or numeric with a scale of 0, and the column must not be nullable.  C:\Projects\Gastrology\MGP\trunk\Sources\Cfg.Mgp.Infrastructure.Database\Organization.sql   3   2   Cfg.Mgp.Infrastructure.Database

任何人都知道我为什么不能创建类型GUID的主键? 我究竟做错了什么?

谢谢!

Answer 1:

IDENTITY不能使用GUID

使用NEWID代替。

CREATE TABLE [dbo].[Organization]
(
    [Id] UNIQUEIDENTIFIER NOT NULL PRIMARY KEY NONCLUSTERED DEFAULT NEWID(), 
    [Name] NVARCHAR(100) NOT NULL, 
    [CreationDate] DATETIME NOT NULL DEFAULT GetDate()
)


Answer 2:

尝试是这样的: -

CREATE TABLE [dbo].[Organization]
(
    [Id] UNIQUEIDENTIFIER NOT NULL PRIMARY KEY NONCLUSTERED DEFAULT NEWID(), 
    [Name] NVARCHAR(100) NOT NULL, 
    [CreationDate] DATETIME NOT NULL DEFAULT GetDate()
)

看看这个链接

从来源 : -

主要缺点使用的GUID作为键值是,他们是大。 在16个字节的流行,他们是在SQL Server中最大的数据类型之一。 建立在的GUID索引将是比建立在IDENTITY列的索引,这通常是整数(4个字节)大和慢。 **>不仅如此,但他们只是普通的难读。 除非你需要一个真正的全球唯一识别码,你可能会更好过与IDENTITY坚持。

**



Answer 3:

身份关键字用于自动递增其通常被用作主键的整数列。 因为你正在使用一个唯一的标识符,包括这个关键字是没有意义的。 (你如何增加一个唯一的标识符?)

只是删除了“身份”的关键字。

http://technet.microsoft.com/en-us/library/ms186775.aspx



文章来源: The identity column must be of data type int, bigint, smallint, tinyint, decimal, or numeric