私の同僚は、私が知らなかったSQL Serverの動作を発見しました。このこれは、各レコードの乱数を生成する良い方法か悪い方法ですか?
CREATE VIEW dbo.vRandNumber AS
SELECT RAND() as RandNumber
GO
CREATE FUNCTION dbo.RandNumber() RETURNS float AS
RETURN (SELECT RandNumber FROM vRandNumber)
GO
DECLARE @mytable TABLE (id INT)
INSERT INTO @mytable SELECT 1
INSERT INTO @mytable SELECT 2
INSERT INTO @mytable SELECT 3
SELECT *, dbo.RandNumber() FROM @mytable
は、データセット内の各レコードの「ランダム」値を生成する最も簡単な方法であることをです。しかし、それが文書化された行動の結果であるのか、偶然の奇妙な収束を利用したのかは完全にはわかりません。
のようなものを使用しますか?
EDIT
これは、RAND()関数自体のメリットについての質問ではなく、UDF/VIEWの組合せの使用は、すべての行に再計算することを強制します。 (dbo.RandNumber()の代わりに最終的なクエリでRAND()を使用すると、すべてのレコードに同じ値が与えられます)。
また、ポイントは値を表示するたびに異なります。たとえばレコードのランダムな選択を可能にします。 SQL Serverの2000+のために
EDIT
。
CHECKSUM(NEWID())はSQL 2000以上で動作します。これは、SQL 2005パッチで削除される可能性のある特定の動作に依存します。 – gbn