34,838
社区成员




NEWID
创建 uniqueidentifier 类型的唯一值。
mssql中的uniqueidentifier数据类型
最近新换了一个工作,在一个全国连锁的服装公司总部做开发,管理全国的分店进销存等的管理,以前从来没有用过uniqueidentifier这个数据类型,在分布式开发中比较常用,下面是此数据类型的相关介绍。
全局唯一标识符
尽管 IDENTITY 属性自动为表生成行号,但不同表的标识符列可以生成相同的行号。这是因为 IDENTITY 属性只须在所使用的表上保持唯一。如果应用程序需要生成在整个数据库或世界各地所有网络计算机的全部数据库中均为唯一的标识符列,请使用 ROWGUIDCOL 属性、uniqueidentifier 数据类型和 NEWID 函数。
使用 ROWGUIDCOL 属性定义全局唯一标识符列时应注意;
一个表只能有一个 ROWGUIDCOL 列,且该列必须定义为 uniqueidentifier 数据类型。
SQL Server 不为该列自动生成值。若要插入全局唯一数值,应为列创建 DEFAULT 定义,以使用 NEWID 功能生成全局唯一数值。
在设置 ROWGUIDCOL 属性后,使用 ROWGUIDCOL 关键字可在选择列表中引用该列。这与使用 IDENTITYCOL 关键字引用 IDENTITY 列相似。
可使用 OBJECTPROPERTY 函数确定表是否含有 ROWGUIDCOL 列,使用 COLUMNPROPERTY 函数确定 ROWGUIDCOL 列的名称。
由于 ROWGUIDCOL 属性不强制唯一性,所以应使用 UNIQUE 约束以确保插入 ROWGUIDCOL 列的值是唯一的。
uniqueidentifier 数据类型存储 16 字节的二进制值,该值的使用与全局唯一标识符 (GUID) 一样。GUID 是一个唯一的二进制数字;世界上的任何两台计算机都不会生成重复的 GUID 值。GUID 主要用于在拥有多个节点、多台计算机的网络中,分配必须具有唯一性的标识符。
uniqueidentifier 列的 GUID 值通常由以下方式获得:
在 Transact-SQL 语句、批处理或脚本中调用 NEWID 函数。
在应用程序代码中,调用返回 GUID 值的应用程序 API 函数或方法。
Transact-SQL NEWID 函数以及应用程序 API 函数和方法从它们网卡上的标识数字以及 CPU 时钟的唯一数字生成新的 uniqueidentifier 值。每个网卡都有唯一的标识号。由 NEWID 返回的 uniqueidentifier 使用服务器上的网卡生成。由应用程序 API 函数和方法返回的 uniqueidentifier 使用客户机上的网卡生成。
一般不将 uniqueidentifier 定义为常量,因为很难保证实际创建的 uniqueidentifier 具有唯一性。指定 uniqueidentifier 常量的方法有两种:
字符串格式
'6F9619FF-8B86-D011-B42D-00C04FC964FF'
二进制格式
0xff19966f868b11d0b42d00c04fc964ff
uniqueidentifier 数据类型不象IDENTITY 属性那样为新插入的行自动生成新的ID。为了得到新的 uniqueidentifier 值,表必须具有一个指定 NEWID 函数的 DEFAULT 子句,或使用 NEWID 函数的 INSERT 语句:
CREATE TABLE MyUniqueTable
(UniqueColumn UNIQUEIDENTIFIER DEFAULT NEWID(),
Characters VARCHAR(10) )
GO
INSERT INTO MyUniqueTable(Characters) VALUES ('abc')
INSERT INTO MyUniqueTable VALUES (NEWID(), 'def')
GO
uniqueidentifier 列可以包含多次出现的 uniqueidentifier 值,除非也对此列指定了 UNIQUE 或 PRIMARY KEY 约束。当有多行引用源表中的同一主键时,引用其它表的 uniqueidentifier 主键的外键列将包含多次出现的个别 uniqueidentifier 值。
一个表可以有多个 uniqueidentifier 列。每个表中可以指定一个具有 ROWGUIDCOL 属性的 uniqueidentifier 列。ROWGUIDCOL 属性表明此列的 uniqueidentifier 值唯一地标识表中的行。但是,该属性并没有执行该唯一性。唯一性必须通过其它机制来执行,比如为列指定 PRIMARY KEY 约束。ROWGUIDCOL 属性主要用于 SQL Server 复制。
uniqueidentifier 数据类型的主要优点是保证由 Transact-SQL NEWID 函数或应用程序 GUID 函数生成的值在全球是唯一的。
uniqueidentifier 数据类型的具有几个缺点:
值长且难懂。这使用户难以正确键入它们,并且更难记住。
这些值是随机的,而且它们不能接受任何使它们对用户变得更有意义的模式。
没有任何方式可以决定生成 uniqueidentifier 值的顺序。它们不适用于那些依赖递增的键值的现有应用程序。
uniqueidentifier 数据类型具有 16 个字节,与其它那些诸如 4 字节的整数相比要相对大一些。这意味着使用 uniqueidentifier 键建立的索引可能会比使用 int 键实现的索引相对慢一些。
在设计分布式数据库时非常有用。
来源:http://blog.hidotnet.com/Databinder/archive/2007/06/22/359.aspx
转一篇博文希望能帮助理解。