CREATE TABLE test1 (id uniqueidentifier ROWGUIDCOL DEFAULT NEWID(),name varchar(10));CREATE TABLE test2 (id uniqueidentifier DEFAULT NEWID(),name varchar(10));insert into test1(name) values('abc');insert into test2(name) values('abc');select * from test1; --ECF21540-FCAB-47B7-9557-D59E42E47CB7select * from test2; --919D8A3A-F68B-4D14-A19F-ACB470A8900D都是生成唯一值,加个ROWGUIDCOL也看不出有什么变化,ROWGUIDCOL的作用究竟是什么呢?

解决方案 »

  1.   

    ROWGUIDCOL提供了一个更通用的方法来查询标识符select ID
    from test1
    select ROWGUIDCOL
    from test1
      

  2.   

    ROWGUIDCOL相当于字段别名,查询的时候不需要知道字段名直接select ROWGUIDCOL就可以。
      

  3.   

    创建表:
    rowguidcol:指定列为全球惟一鉴别行号列(rowguidcol是Row Global UniqueIdentifier Column的缩写)。此列的数据类型必须为UNIQUEIDENTIFIER类型。一个表中数据类型为UNIQUEIDENTIFIER的列中只能有一个列被定义为rowguidcol列。rowguidcol属性不会使列值具有惟一性,也不会自动生成一个新的数据值给插入行。需要在INSERT语句中使用NEWID()函数或指定列的默认值为NEWID()函数。
    修改表:
     {ADD|DROP}rowguidcol}:添加或删除列的rowguidcol属性。rowguidcol属性只能指定给一个UNIQUEIDENTIFIER列。
    SELECT子句:
    rowguidcol:返回行全局惟一标识列。如果在FROM子句中有多个表具有rowguidcol属性,则必须用特定的表名(如T1.rowguidcol)限定 rowguidcol。
      

  4.   

    CREATE TABLE test1 (id uniqueidentifier ROWGUIDCOL DEFAULT NEWID(),name varchar(10));CREATE TABLE test2 (id uniqueidentifier DEFAULT NEWID(),name varchar(10));insert into test1(name) values('abc');insert into test2(name) values('abc');
    /*
    ROWGUIDCOL 
    指示新列是行 GUID 列。对于每个表,只能将其中的一个 uniqueidentifier 列指定为 ROWGUIDCOL 列。ROWGUIDCOL 属性只能分配给 uniqueidentifier 列。如果数据库兼容级别小于或等于 65,则 ROWGUIDCOL 关键字无效。有关详细信息,请参阅 sp_dbcmptlevel (Transact-SQL)。用户定义数据类型列不能使用 ROWGUIDCOL 指定。ROWGUIDCOL 属性并不强制列中所存储值的唯一性。该属性也不会为插入到表中的新行自动生成值。若要为每列生成唯一值,请在 INSERT 语句中使用 NEWID 函数,或使用 NEWID 函数作为该列的默认值。 */
    go