ストアドプロシージャで新しいGuidを生成する方法は?


93

現在、テーブルに新しい行を挿入するストアドプロシージャがあります。

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

したがって、主キー「id」はGuidです。C#コードで新しいGuidを作成する方法は知っていますが、ストアドプロシージャ内で、主キー値の新しいGuidを生成する方法がわかりません。

回答:


178

SQL Serverでは、関数NEWIDを使用できます。C#を使用しているので、SQL Serverを使用していると思います。他のデータベースシステムにも同様の機能があると思います。

select NEWID()

Oracleを使用している場合は、SYS_GUID()関数を使用できます。この質問への回答を確認してください:OracleでGUIDを生成する



12

質問ではこれについて質問しませんでしたが、主キーにGUIDを使用することが常に良い考えであるとは限らないことを指摘する価値があると思います。シンプルですが、GUIDをインデックスで使用するとパフォーマンスに影響を与える可能性があります。代わりに整数値であるID列の使用を検討しましたか?

読むのに役立つかもしれない記事がいくつかあります。


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;

両方ともmysqlでテスト
Fusca Software

1

質問の形式で(ペダントを見つけてください!)

insert into cars
  (id, Make, Model)
  values(NEWID(), "Ford", "Mustang")
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.