标识列的数据类型必须为int,bigint,smallint,tinyint,decimal或numeric

时间:2013-08-12 16:15:34

标签: c# sql database visual-studio azure

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

谢谢!

3 个答案:

答案 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”关键字。

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

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