ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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


C
Community

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

select NEWID()

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


B
BradB

尝试这个:

SELECT NewId()

A
Adam Porad

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

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

使用 GUID 作为主键的性能影响(SQL Server 杂志)

主键:ID 与 GUID (Jeff Atwood)

GUID 作为主键的成本(其他两篇文章引用了 Jimmy Nelson 的文章)


是的,我同意你的看法。但是,我正在研究其他人开发的数据库。以前的所有表都使用 Guid 作为主键,所以我只是想保持一致。虽然对于新表,也许我应该根据具体情况进行评估。谢谢你的信息。
F
Fusca Software

在 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中测试过
R
Regianni

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

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