理解uniqueidentifier类型和NEWID()

2011-01-29 20:21:00

uniqueidentifier是全局唯一标识符 (GUID)
NEWID()返回类型为uniqueidentifier
每次运行以上程序返回不同的uniqueidentifier
NEWID()另外一个应用是在Select出记录时随即选出N条记录
比如:Select    top 5 * from yourtable order by newid()
这样就能从yourtable表中每次随机地选出5条记录,这对于随机显示新闻的地方比较有用

GUID(Global unique identifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一的标识号)以及 CPU 时钟的唯一数字生成的的一个 16 字节的二进制值。

GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 GUID 值。

世界上的任何两台计算机都不会生成重复的 GUID 值。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。在 Windows 平台上,GUID 应用非常广泛:注册表、类及接口标识、数据库、甚至自动生成的机器名、目录名等。

在这次开发 ASP.NET 应用时,我大量使用了类型为 GUID 的 ID 列作为各实体表的关键字(键)。由于其唯一、易产生的特性,给应用程序处理带来诸多好处。

1、在 SQL Server 中使用 GUID

如果在 SQL Server 的表定义中将列类型指定为 uniqueidentifier,则列的值就为 GUID 类型。

SQL Server 中的 NewID() 函数可以产生 GUID 唯一值,使用此函数的几种方式如下:

1) 作为列默认值

将 uniqueidentifier 的列的默认值设为 NewID(),这样当新行插入表中时,会自动生成此列 GUID 值。

2)使用 T-SQL

在 T-SQL 中使用 NewID()函数,如“INSERT INTO Table(ID,... ) VALUES(NewID(),...)”来生成此列的 GUID 值。

3)提前获取 GUID

由于特殊功能需要,需要预先获知新行的 ID 值,也可以使用如下 C# 代码提前获得 GUID 的值,再存储到数据库中:

SqlCommand cmd = New SqlCommand();
cmd.CommandText = "SELECT NewID()";
string rowID = (string) cmd.ExecuteScalar();
cmd.CommandText = "INSERT INTO Table(ID,...) VALUES(@ID,...)
cmd.Parameters.Add("@ID",SqlDbType.UniqueIdentifier).Value = new Guid(rowID);
cmd.ExecuteNoQuery();

uniqueidentifier 值不能进行算术运算,但可以进行(意义不大的)比较操作和 NULL 检查;它不能象 IDENTITY 列一样,可以获知每行的增加时间的先后顺序,只能通过增加其它时间或时间戳列来完成此功能。

2、在 .NET 中使用 GUID

GUID 在 .NET 中使用非常广泛,而且 .NET Framework 提供了专门 Guid 基础结构。

Guid 结构的常用法包括:

1) Guid.NewGUID()

生成一个新的 GUID 唯一值

2) Guid.ToString()

将 GUID 值转换成字符串,便于处理

3)构造函数 Guid(string)

由 string 生成 Guid 结构,其中string 可以为大写,也可以为小写,可以包含两端的定界符“{}”或“()”,甚至可以省略中间的“-”,Guid 结构的构造函数有很多,其它构造用法并不常用。

同时,为了适用数据库中使用 GUID 的需要,.NET Framework 也提供了 SqlGUID 结构,它和 Guid 结构类似,只是两者对排序(CompareTo)的处理方式不同,SqlGuid 计算值的最后 6 个字节。而 Guid 计算全部 16 个字节,这种差异可能会给 SQL Server 中 uniqueidentifier 列的排序带来一定影响,当然这种排序意义也不大。

.NET Framework 中可以使用类 GuidConverter 提供将 Guid 结构与各种其他表示形式相互转换的类型转换器。

点赞
  1. PokerPhantom说道:
    Google Chrome Windows 10
    https://t.me/officials_pokerdom/3120
  2. HighRollerMage说道:
    Google Chrome Windows 10
    https://t.me/s/dragon_money_mani
  3. AceSorcerer说道:
    Google Chrome Windows 10
    http://images.google.ki/url?q=https://t.me/s/officials_7k/664
  4. BluffMaster说道:
    Google Chrome Windows 10
    В мире азарта, где всякий сайт норовит привлечь обещаниями простых джекпотов, рейтинг онлайн казино на реальные деньги рубли превращается как раз той ориентиром, что проводит через дебри подвохов. Для профи плюс начинающих, кто пресытился из-за пустых посулов, он инструмент, дабы почувствовать настоящую выплату, словно тяжесть золотой монеты у пальцах. Минус ненужной воды, лишь реальные сайты, в которых отдача не лишь число, а ощутимая удача.Подобрано на основе поисковых поисков, словно паутина, что вылавливает самые актуальные тренды в сети. В нём минуя места к шаблонных трюков, каждый пункт как карта на столе, где подвох выявляется сразу. Игроки понимают: по рунете стиль речи на подтекстом, там юмор маскируется словно совет, даёт избежать обмана.На https://ilde.upf.edu/pg/lds/tree/441867 такой рейтинг лежит как раскрытая колода, подготовленный для игре. Загляни, коли хочешь почувствовать ритм реальной игры, минуя обмана плюс неудач. Игрокам кто знает тактильность удачи, это словно взять фишки в ладонях, а не пялиться по дисплей.

发表回复

电子邮件地址不会被公开。必填项已用 * 标注