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

C# 标识列的数据类型必须为int、bigint、smallint、tinyint、decimal或numeric,c#,sql,database,visual-studio,azure,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

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


谢谢

试试这样的方法:-

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作为键值的主要缺点是 大的它们是SQL中最大的数据类型之一,每秒16字节 服务器基于guid构建的索引将比 索引建立在标识列上,标识列通常为整数4字节。 ** >不仅如此,它们很难读懂。除非你需要一个 真正的全局唯一标识符,您最好还是坚持使用它 有身份


**

试试这样的方法:-

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作为键值的主要缺点是 大的它们是SQL中最大的数据类型之一,每秒16字节 服务器基于guid构建的索引将比 索引建立在标识列上,标识列通常为整数4字节。 ** >不仅如此,它们很难读懂。除非你需要一个 真正的全局唯一标识符,您最好还是坚持使用它 有身份

**

标识不能与GUID一起使用

改用

标识不能与GUID一起使用

改用


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

只需删除IDENTITY关键字


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

只需删除IDENTITY关键字


标识列是数字列,因为数据库必须自动递增它们…对GUID执行+1操作作为一个操作没有意义。如果您想使用GUID/UniqueIdentifier列作为主键,并让值自动生成,那么可能信息可以帮助标识列是数字的,因为数据库必须自动递增它们…对GUID执行+1操作作为一个操作没有意义。如果您想使用GUID/UniqueIdentifier列作为主键,并使值自动生成,那么信息可能会有所帮助。这似乎解决了这个问题。现在,如果我不想让数据库生成这个Guid,而是让mu域生成,那么我可以删除“默认NEWID”吗?是的,您可以删除它,但您需要将Id与记录一起插入。是的,我的域生成Guid。再次感谢!这似乎解决了问题。现在,如果我不想让数据库生成这个Guid,而是让mu域生成,那么我可以删除“默认NEWID”吗?是的,您可以删除它,但您需要将Id与记录一起插入。是的,我的域生成Guid。再次感谢!谢谢是的,我考虑过这一点,但因为我的域生成了这些密钥,并且我正在为Azure水平扩展+分布式应用程序开发,所以guid是我的最佳选择。这就是为什么我没有把身份证集中起来。谢谢。是的,我考虑过这一点,但因为我的域生成了这些密钥,并且我正在为Azure水平扩展+分布式应用程序开发,所以guid是我的最佳选择。这就是为什么我没有把id聚集起来。