Как сгенерировать новый Guid в хранимой процедуре?

94

В настоящее время у меня есть хранимая процедура, в которой я хочу вставить новые строки в таблицу.

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

Итак, первичный ключ id - это Guid. Я знаю, как создать новый Guid в коде C #, но внутри хранимой процедуры я не уверен, как сгенерировать новые Guid для значений первичного ключа.

Мистер крикет
источник

Ответы:

179

С SQL Server вы можете использовать функцию NEWID . Вы используете C #, поэтому я предполагаю, что вы используете SQL Server. Я уверен, что другие системы баз данных имеют аналогичные функции.

select NEWID()

Если вы используете Oracle, вы можете использовать SYS_GUID()функцию. Ознакомьтесь с ответом на этот вопрос: сгенерируйте GUID в Oracle

Адам Порад
источник
12

Вы не спрашивали об этом в своем вопросе, но я думаю, что стоит отметить, что использование GUID для первичного ключа не всегда является хорошей идеей. Хотя это просто, это может повлиять на производительность, когда GUID используется в индексе. Рассматривали ли вы использование вместо этого столбца Identity целочисленного значения?

Вот пара статей, которые было бы полезно прочитать.

Адам Порад
источник
1
Да, я согласен с вами. Однако я работаю над базой данных, которую разработал кто-то другой. Во всех предыдущих таблицах в качестве первичного ключа использовался Guid, поэтому я просто стараюсь быть последовательным. Хотя для новых таблиц, возможно, мне следует оценивать индивидуально. Спасибо за информацию.
Мистер Крикет,
1

В 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;
Программное обеспечение Fusca
источник
оба протестированы в mysql
Fusca Software
1

В формате вопроса (заметьте педанта!)

insert into cars
  (id, Make, Model)
  values(NEWID(), "Ford", "Mustang")
Regianni
источник