Мой коллега обнаружил поведение на 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
Это кажется будет самым быстрым способом генерации случайных «» значения для каждой записи в наборе данных. Но я не совсем уверен, что это результат документированного поведения или использование причудливой конвергенции совпадений.
Будет вы используете что-то вроде этого?
РЕДАКТИРОВАТЬ
Это не вопрос о достоинствах функции RAND() сам, но использование комбинации ОДС/VIEW, чтобы заставить его пересчитать на каждой строке , (Использование только RAND() в конечном запросе вместо dbo.RandNumber() даст одинаковое значение для каждой записи.)
Кроме того, дело в том, что значение будет отличаться каждый раз, когда вы смотрите на него , Например, включение случайного выбора записей, например.
EDIT
Для SQL Server 2000+.
CHECKSUM (NEWID()) по крайней мере работает на SQL 2000+. Это зависит от определенного поведения, которое может быть удалено в патче SQL 2005. – gbn