【发布时间】:2011-02-19 17:19:19
【问题描述】:
基本上我想以与身份类似的方式使用 uniqueidentifier。我不想在其中插入值,它应该只是自动插入值,每行的值不同。 我无法在 uniqueidentifier 类型的列上设置自动增量(属性 'autoincrement' 设置为 false 并且不可编辑)。
【问题讨论】:
标签: sql-server database uniqueidentifier auto-increment
基本上我想以与身份类似的方式使用 uniqueidentifier。我不想在其中插入值,它应该只是自动插入值,每行的值不同。 我无法在 uniqueidentifier 类型的列上设置自动增量(属性 'autoincrement' 设置为 false 并且不可编辑)。
【问题讨论】:
标签: sql-server database uniqueidentifier auto-increment
使用 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() 指定为交互式表设计器中列的默认值。
见:http://social.msdn.microsoft.com/Forums/en-US/sqltools/thread/cad8a4d7-714f-44a2-adb0-569655ac66e6
解决方法:创建表而不指定任何默认值,然后在普通查询窗口中键入此 T-SQL 语句并运行它:
ALTER TABLE dbo.YourTable
ADD CONSTRAINT DF_SerialID DEFAULT newsequentialid() FOR SerialID
这应该可以解决问题!
【讨论】:
我猜你的意思是 SQLServer 而不是 C#...
将列设置为 PRIMARY KEY 和 ROWGUID
RowGuid http://img341.imageshack.us/img341/8867/sqlserverrowguid.png
【讨论】:
nvarchar(36) 比 CI 更好?
我认为
CREATE TABLE dbo.YourTable
(
SerialID UNIQUEIDENTIFIER PRIMARY KEY DEFAULT newsequentialid()
)
更简单
【讨论】: