我已经在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的主键? 我究竟做错了什么?
谢谢!
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()
)
尝试是这样的: -
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坚持。
**
身份关键字用于自动递增其通常被用作主键的整数列。 因为你正在使用一个唯一的标识符,包括这个关键字是没有意义的。 (你如何增加一个唯一的标识符?)
只是删除了“身份”的关键字。
http://technet.microsoft.com/en-us/library/ms186775.aspx
文章来源: The identity column must be of data type int, bigint, smallint, tinyint, decimal, or numeric