如何在存储过程中生成新的 Guid?

Posted

技术标签:

【中文标题】如何在存储过程中生成新的 Guid?【英文标题】:How to generate a new Guid in stored procedure? 【发布时间】:2011-04-25 16:26:24 【问题描述】:

我目前有一个存储过程,我想在其中向表中插入新行。

insert into cars
(id, Make, Model)
values('A new Guid', "Ford", "Mustang")

所以主键 'id' 是一个 Guid。我知道如何在 C# 代码中创建新的 Guid,但在存储过程中我不确定如何为主键值生成新的 Guid。

【问题讨论】:

【参考方案1】:

在 SQL Server 中,您可以使用函数 NEWID。您使用的是 C#,所以我假设您使用的是 SQL Server。我相信其他数据库系统也有类似的功能。

select NEWID()

如果您使用的是 Oracle,那么您可以使用 SYS_GUID() 函数。看看这个问题的答案:Generate a GUID in Oracle

【讨论】:

【参考方案2】:

试试这个:

SELECT NewId()

【讨论】:

【参考方案3】:

您没有在问题中询问此问题,但我认为值得指出的是,将 GUID 用作主键并不总是一个好主意。虽然它很简单,但在索引中使用 GUID 时会影响性能。您是否考虑过使用整数值 Identity column 来代替?

这里有几篇文章可能对阅读有帮助。

Performance Effects of Using GUIDs as Primary Keys(SQL 服务器 杂志) Primary Keys: IDs versus GUIDs(杰夫阿特伍德) The Cost of GUIDs as Primary Keys(其他两篇文章引用了 Jimmy Nelson 的文章)

【讨论】:

是的,我同意你的看法。但是,我正在研究其他人开发的数据库。以前的所有表都使用 Guid 作为主键,所以我只是想保持一致。虽然对于新表,也许我应该根据具体情况进行评估。不过感谢您提供的信息。【参考方案4】:

mysql 中它是 UUID()。 所以查询将是:

insert into cars
(id, Make, Model)
values(UUID(), "Ford", "Mustang")

如果你想重用 uuid,你可以这样做:

set @id=UUID();
insert into cars
(id, Make, Model)
values(@id, "Ford", "Mustang");
select @id;

【讨论】:

都在mysql中测试过【参考方案5】:

以问题的形式(发现书呆子!)

insert into cars
  (id, Make, Model)
  values(NEWID(), "Ford", "Mustang")

【讨论】:

以上是关于如何在存储过程中生成新的 Guid?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Binance 中生成新的存款 Tether 地址

如何使用存储过程在 SQL Server 中生成表的数据脚本文件?

在当前 HTTPContext 中生成新的 ASP.NET 会话

Hadoop 两种环境下的checkpoint机制

在经纬度中添加 X 米并在 PHP 中生成新的经纬度

React 和 Socket.io | useState 在输入中生成新的套接字连接 onChange