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)などを生成するのに都合が良いです。
