在Sql Server中使用Guid类型的列及设置Guid类型的默认值

在SQL Server中,GUID(Globally Unique Identifier)通常指的是一个128位(16字节)的唯一标识符。在SQL Server中,可以使用UNIQUEIDENTIFIER数据类型来存储GUID值。如果你想在创建表时为GUID类型的列设置默认值,可以使用NEWID()函数或者NEWSEQUENTIALID()函数。

一、无序GUID,使用NEWID()

1、NEWID()函数作为默认值

每次插入新纪录都会生成一个新的唯一标识符。这在不需要保证生成顺序的场景下非常有用,比如在日志记录或者临时数据生成时。

CREATE TABLE MyTable (
ID UNIQUEIDENTIFIER DEFAULT NEWID(),
Name NVARCHAR(100)
);

2、其他操作方式

  • ‌T-SQL插入时生成‌:通过INSERT语句直接调用NEWID()。
    INSERT INTO ExampleTable (ID, ...) VALUES (NEWID(), ...);
  • ‌程序端生成‌:在C#等语言中使用System.Guid.NewGuid()生成后传入数据库

3、格式转换

若需去除横线或转换为小写,可使用SQL函数处理。

SELECT LOWER(REPLACE(CONVERT(NVARCHAR(36), NEWID()), '-', ''));

二、有序GUID,使用NEWSEQUENTIALID()

NEWSEQUENTIALID()函数生成的GUID值是唯一的,并且是顺序递增的。这对于需要保证插入顺序的应用程序(例如,在数据库中创建时间戳或版本控制)来说非常有用。

CREATE TABLE MyTable (
ID UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID(),
Name NVARCHAR(100)
);

注意:NEWSEQUENTIALID()仅适用于表设计时的默认值,不可用于赋值操作。

 

设置默认值注意事项

1、表级别默认值

在SQL Server中,你可以在表定义时为UNIQUEIDENTIFIER类型的列设置默认值。这确保了每当你插入新行时,如果该列没有被明确指定,它将自动获得一个GUID值。

2、插入时指定值

如果你需要在插入行时显式指定一个特定的GUID值,可以在插入语句中为该列提供值,例如:

INSERT INTO MyTable (ID, Name) VALUES ('123e4567-e89b-12d3-a456-426614174000', 'Example Name');

3、性能考虑

使用NEWID()可能会影响性能,因为它每次调用都会生成一个新的GUID。而NEWSEQUENTIALID()虽然保证了唯一性和顺序性,但它在某些场景下可能会有更好的性能表现(提高索引性能)。选择哪一个取决于你的具体需求。

4、数据库兼容性

确保你的SQL Server版本支持NEWSEQUENTIALID()函数。这个函数是在SQL Server 2005及以后版本中引入的。如果你使用的是更早的版本,你将只能使用NEWID()。

通过以上方法,你可以在SQL Server中灵活地使用和设置GUID类型的列的默认值。

 
posted @ 2017-04-15 15:01  即兴随缘  阅读(16024)  评论(0)    收藏  举报