4

我在 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 类型的主键?我究竟做错了什么?

谢谢!

4

3 回答 3

5

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()
)
于 2013-08-12T16:18:52.503 回答
2

IDENTITY 关键字用于自动递增通常用作主键的整数列。因为您使用的是唯一标识符,所以包含此关键字没有意义。(如何增加唯一标识符?)

只需删除“IDENTITY”关键字即可。

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

于 2013-08-12T16:25:33.767 回答
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。

**

于 2013-08-12T16:18:06.157 回答