Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 自动递增唯一标识符_Sql Server_Database_Uniqueidentifier_Auto Increment - Fatal编程技术网

Sql server 自动递增唯一标识符

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

基本上,我想以与identity类似的方式使用uniqueidentifier。我不想在其中插入值,它应该自动插入值,每行的值不同。
我无法对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:不!它也有同样的问题:太宽了,而且完全是随机的——此外,它现在是可变长度的——这让它变得更糟!