作者在 2010-06-02 10:26:57 发布以下内容
uniqueidentifier中文含义“唯一的标识符”。
uniqueidentifier数据类型是16个字节的二进制值,应具有唯一性,必须与NEWID()函数配合使用。
uniqueidentifier数据类型与identity自增不同,不会为插入的新行自动生成新的ID,新值由NEWID()函数指定。
NEWID()函数值会生成全球唯一的标识,标识由网卡号和CPU时钟组成,如:6F9619FF-8B86-D011-B42D-00C04FC964FF。
一个表可以定义多个uniqueidentifier列。
对变量使用NEWID()函数
- -- Creating a local variable with DECLARE/SET syntax.
- DECLARE @myid uniqueidentifier
- SET @myid = NEWID()
- PRINT 'Value of @myid is: '+ CONVERT(varchar(255), @myid)
在 CREATE TABLE 语句中使用 NEWID
- -- Creating a table using NEWID for uniqueidentifier data type.
- CREATE TABLE cust
- (
- CustomerID uniqueidentifier NOT NULL
- DEFAULT newid(),
- Company varchar(30) NOT NULL,
- ContactName varchar(60) NOT NULL,
- Address varchar(30) NOT NULL,
- City varchar(30) NOT NULL,
- StateProvince varchar(10) NULL,
- PostalCode varchar(10) NOT NULL,
- CountryRegion varchar(20) NOT NULL,
- Telephone varchar(15) NOT NULL,
- Fax varchar(15) NULL
- )
- GO
- -- Inserting data into cust table.
- INSERT cust
- (CustomerID, Company, ContactName, Address, City, StateProvince,
- PostalCode, CountryRegion, Telephone, Fax)
- VALUES
- (NEWID(), 'Wartian Herkku', 'Pirkko Koskitalo', 'Torikatu 38', 'Oulu', NULL,
- '90110', 'Finland', '981-443655', '981-443655')
- INSERT cust
- (CustomerID, Company, ContactName, Address, City, StateProvince,
- PostalCode, CountryRegion, Telephone, Fax)
- VALUES
- (NEWID(), 'Wellington Importadora', 'Paula Parente', 'Rua do Mercado, 12', 'Resende', 'SP',
- '08737-363', 'Brasil', '(14) 555-8122', '')
- INSERT cust
- (CustomerID, Company, ContactName, Address, City, StateProvince,
- PostalCode, CountryRegion, Telephone, Fax)
- VALUES
- (NEWID(), 'Cactus Comidas para Ilevar', 'Patricio Simpson', 'Cerrito 333', 'Buenos Aires', NULL,
- '1010', 'Argentina', '(1) 135-5555', '(1) 135-4892')
- INSERT cust
- (CustomerID, Company, ContactName, Address, City, StateProvince,
- PostalCode, CountryRegion, Telephone, Fax)
- VALUES
- (NEWID(), 'Ernst Handel', 'Roland Mendel', 'Kirchgasse 6', 'Graz', NULL,
- '8010', 'Austria', '7675-3425', '7675-3426')
- INSERT cust
- (CustomerID, Company, ContactName, Address, City, StateProvince,
- PostalCode, CountryRegion, Telephone, Fax)
- VALUES
- (NEWID(), 'Maison Dewey', 'Catherine Dewey', 'Rue Joseph-Bens 532', 'Bruxelles', NULL,
- 'B-1180', 'Belgium', '(02) 201 24 67', '(02) 201 24 68')
- GO
使用 uniqueidentifier 和变量赋值,将名为 @myid 的局部变量声明为 uniqueidentifier 数据类型的变量。然后使用 SET 语句为该变量赋值。
- DECLARE @myid uniqueidentifier
- SET @myid = 'A972C577-DFB0-064E-1189-0154C99310DAAC12'
- GO
uniqueidentifier 数据类型具有下列缺点:
值长且难懂。这使用户难以正确键入它们,并且更难记住。
这些值是随机的,而且它们不支持任何使其对用户更有意义的模式。
也没有任何方式可以决定生成 uniqueidentifier 值的顺序。它们不适用于那些依赖递增的键值的现有应用程序。
当 uniqueidentifier 为 16 字节时,其数据类型比其他数据类型(例如 4 字节的整数)大。这意味着使用 uniqueidentifier 键生成索引的速度相对慢于使用 int 键生成索引的速度。
只对没有其他适用的数据类型的范围非常窄的方案使用 GUID。