SQLでランダムにユニーク(一意)な値(ID)を取得する

プログラミング SQL Server

SQLServerでテーブル内でユニークキーをランダム生成して設定したい場合にNEWID()関数を利用するとユニーク(一意)な値(ID)を取得することができます。

スポンサーリンク

ランダムにユニーク(一意)な値(ID)を取得する

SQLServerでテーブル内でユニークキーをランダム生成して設定したい場合にNEWID()関数を利用するとユニーク(一意)な値(ID)を取得することができます。

NEWID()でランダムにユニーク(一意)な値(ID)を取得

NEWID()を呼び出してみます。

INSERT INTO
    test_table ( key_info, name , age )
VALUES
    (NEWID(), 'lightgauge_taro', 30 )

INSERT INTO
    test_table ( key_info, name , age )
VALUES
    (NEWID(), 'lightgauge_jiro', 40 )

NEWID()の戻り値はuniqueidentifier型なのでkey_infoはuniqueidentifierで
宣言されている必要があります。

INT型でランダムにユニーク(一意)な値(ID)を取得

NEWID()関数は「UNIQUEIDENTIFIER」型なので、
どうしてもINT型にしたい場合はCONVERT()関数で
INT型にCONVERTします。

CREATE TABLE test_table
(
     key_info    INT
    ,name        VARCHAR(20)
    ,age         INT
)

INSERT INTO test_table ( key_info, name , age ) VALUES ( CONVERT(INT, CONVERT(VARBINARY(4), NEWID())), '太郎さん', 10 )
INSERT INTO test_table ( key_info, name , age ) VALUES ( CONVERT(INT, CONVERT(VARBINARY(4), NEWID())), '二郎さん', 20 )
INSERT INTO test_table ( key_info, name , age ) VALUES ( CONVERT(INT, CONVERT(VARBINARY(4), NEWID())), '三郎さん', 30 )

SELECT key_info, name, age FROM test_table

DROP TABLE test_table

実行結果は

key_info name age
-1494990381 太郎さん 10
1138790860 二郎さん 20
58084516 三郎さん 30

になります。

ランダムにユニークインデックス(unique index)などを生成するのに都合が良いです。

タイトルとURLをコピーしました