1. ホーム
  2. sql-server

[解決済み] SQLでカラムを乱数で埋めるにはどうしたらいいですか?どの行も同じ値になってしまう

2023-03-01 05:28:25

質問

UPDATE CattleProds
SET SheepTherapy=(ROUND((RAND()* 10000),0))
WHERE SheepTherapy IS NULL

SELECT を実行すると、乱数が はすべての行で同じです。 . ユニークな乱数を生成するためにどのようなアイデア?

どのように解決するには?

の代わりに rand() の代わりに newid() を使用します。これは、結果の各行に対して再計算されます。 通常の方法は、チェックサムのモジュロを使用することです。ただし checksum(newid()) は -2,147,483,648 を生成し、整数オーバーフローを引き起こす可能性があることに注意してください。 abs() で整数オーバーフローを起こすので、チェックサムの返り値を絶対値に変換する前にモジュロを使用する必要があります。

UPDATE CattleProds
SET    SheepTherapy = abs(checksum(NewId()) % 10000)
WHERE  SheepTherapy IS NULL

0から9999の間の乱数を生成します。