Sql server 自动递增唯一标识符
基本上,我想以与identity类似的方式使用uniqueidentifier。我不想在其中插入值,它应该自动插入值,每行的值不同。Sql server 自动递增唯一标识符,sql-server,database,uniqueidentifier,auto-increment,Sql Server,Database,Uniqueidentifier,Auto Increment,基本上,我想以与identity类似的方式使用uniqueidentifier。我不想在其中插入值,它应该自动插入值,每行的值不同。 我无法对uniqueidentifier类型的列设置自动增量(属性“autoincrement”设置为false且不可编辑)。使用NewID()作为默认值。至少对于SQL Server,您会这样做 甚至更好:使用newsequentialid()作为UNIQUEIDENITIFER列的默认值。这将为您提供一系列有序的guid CREATE TABLE dbo.Yo
我无法对uniqueidentifier类型的列设置自动增量(属性“autoincrement”设置为false且不可编辑)。使用NewID()作为默认值。至少对于SQL Server,您会这样做 甚至更好:使用
newsequentialid()
作为UNIQUEIDENITIFER列的默认值。这将为您提供一系列有序的guid
CREATE TABLE dbo.YourTable
(SerialID UNIQUEIDENTIFIER
CONSTRAINT DF_SerialID DEFAULT newsequentialid(),
.... (other columns)......
)
问题是:newsequentialid只能作为默认列使用-您不能将其作为函数或任何东西调用。但这似乎符合你的要求
更新:SQL Server Management Studio中似乎存在已确认的错误,该错误阻止将newsequentialid()
指定为交互式表设计器中某列的默认值
见:
解决方法:在不指定任何默认值的情况下创建表,然后在普通查询窗口中键入此T-SQL语句并运行它:
ALTER TABLE dbo.YourTable
ADD CONSTRAINT DF_SerialID DEFAULT newsequentialid() FOR SerialID
那就应该成功了 我猜你指的是SQLServer而不是C# 将列设置为主键和ROWGUID 我想
CREATE TABLE dbo.YourTable
(
SerialID UNIQUEIDENTIFIER PRIMARY KEY DEFAULT newsequentialid()
)
更简单这对我来说一点都不麻烦。你的答案似乎正是我想要的。我要试试:)我得到“验证XY列默认值时出错”。你能控制一下你的代码吗(打字错误?)@drasto:我在发布之前在SQLServer2008R2上运行了这段代码,它可以工作。您有什么版本的SQL Server???我删除了newsequentialid()周围的额外括号-可能这是个问题?Is适用于2008R2,这是VS 2010 Ultimate edition中预装的版本。我不确定在哪里可以找到服务器的版本,但我会查找它。@drasto:似乎是SQL server Management Studio的错误:-将语句键入为SQL代码并运行它!我已经尝试过了,但它似乎总是生成相同的标识符(这一个:“00000000-0000-0000-0000-000000000000”)。因此,当插入第二行时,我得到了一个错误(绑定到插入已经使用的主键),您应该直接在数据库的表定义中设置newId()!只需确保不要使用表上的聚集索引!!为什么不呢?我在一个项目中使用它,效果很好,一切看起来都很正常,检查了执行计划,表排序,一切都很正常…GUID作为聚集索引非常糟糕:签出-它们会导致大量页面和索引fragmentation@marc_s将其存储为
nvarchar(36)
比存储为CI
更好吗?@Zapnologica:不!它也有同样的问题:太宽了,而且完全是随机的——此外,它现在是可变长度的——这让它变得更糟!