我在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类型的主键?我做错了什么?
谢谢!
答案 0 :(得分: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()
)
查看此link
来自source: -
使用GUID作为键值的主要缺点是它们是 大。弹出的是16个字节,它们是SQL中最大的数据类型之一 服务器。构建在GUID上的索引将比大于和慢 构建在IDENTITY列上的索引,通常是整数(4个字节)。 ** 的>不仅如此,他们只是很难阅读。除非你需要一个 真正全球唯一的标识符,你最好坚持下去 带有IDENTITY。
**
答案 1 :(得分:2)
IDENTITY关键字用于自动递增通常用作主键的整数列。因为您使用的是唯一标识符,所以包含此关键字毫无意义。 (如何增加唯一标识符?)
只需删除“IDENTITY”关键字。
答案 2 :(得分: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()
)