Como gerar um novo Guid no procedimento armazenado?


94

Atualmente, tenho um procedimento armazenado no qual desejo inserir novas linhas em uma tabela.

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

Portanto, o 'id' da chave primária é um Guid. Eu sei como criar um novo Guid em código C #, mas dentro do procedimento armazenado, não tenho certeza de como gerar os novos Guids para os valores da chave primária.

Respostas:


179

Com o SQL Server, você pode usar a função NEWID . Você está usando C #, então presumo que esteja usando o SQL Server. Tenho certeza de que outro sistema de banco de dados tem funções semelhantes.

select NEWID()

Se estiver usando o Oracle, você pode usar a SYS_GUID()função. Confira a resposta a esta pergunta: Gere um GUID no Oracle



12

Você não perguntou sobre isso em sua pergunta, mas acho que vale a pena ressaltar que usar um GUID como chave primária nem sempre é uma boa ideia. Embora seja simples, pode afetar o desempenho quando um GUID é usado em um índice. Você já pensou em usar uma coluna de identidade que é um valor inteiro?

Aqui estão alguns artigos que podem ser úteis para ler.


1
Sim, eu concordo com você. No entanto, estou trabalhando em um banco de dados que outra pessoa desenvolveu. Todas as tabelas anteriores usavam um Guid como chave primária, então estou apenas tentando ser consistente. Porém, para novas tabelas, talvez eu deva avaliar caso a caso. Obrigado pela informação embora.
Sr. Cricket,

1

No MySQL, é UUID (). então a consulta seria:

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

se quiser reutilizar o uuid, você pode fazer assim:

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

ambos testados em mysql
Fusca Software

1

No formato da pergunta (veja o pedante!)

insert into cars
  (id, Make, Model)
  values(NEWID(), "Ford", "Mustang")
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.