Случайные значения TSQL RAND - PullRequest
       3

Случайные значения TSQL RAND

3 голосов
/ 17 августа 2010

Мне нужно заполнить фиктивными значениями таблицу.

Мне нужно создать случайное сгенерированное значение "RANDOM_VALUE" для каждой созданной строки.

Случайное значение должно быть строкой, а диапазон может быть только «A» или «B».

Скрипт должен иметь возможность перечислять серии строк со случайно сгенерированным значением A или B

Вот пример того, как должно работать:

ROW   RANDOM_VALUE
1     A
2     B
3     B
4     A
...   ...

Есть идеи, как это сделать? Спасибо!

Ответы [ 3 ]

14 голосов
/ 17 августа 2010

Rand() оценивается только один раз для каждого столбца, поэтому будет одинаковым для всех строк.

SELECT CHAR(65+ABS(CHECKSUM(NEWID()))%2), RestOfCols
FROM YourTable

Если вам нужен вывод точно в соответствии с вашим вопросом, просто присоединитесь к достаточно большой таблице. например,

WITH cte AS
(
SELECT 
      ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS ROW,
      CHAR(65+ABS(CHECKSUM(NEWID()))%2) AS RANDOM_VALUE
FROM sys.objects
)
INSERT INTO DummyTable
SELECT ROW,RANDOM_VALUE 
FROM cte 
WHERE ROW<= 4
2 голосов
/ 17 августа 2010

для генерации тестовых данных, вам может быть полезно иметь детерминированные данные.Другими словами, каждый раз, когда вы генерируете данные, это одно и то же.Таким образом, проще воспроизводить ошибки.

Для этого вы можете использовать hashbytes() над детерминированным начальным числом.Другими словами:

create function dbo.fn_RandishInt(@seed nvarchar(max), @min int, @max int)
returns int
as
begin
    declare @crc bigint
    declare @p float

    set @crc = cast(cast(hashbytes('md5', @seed) as int) as bigint) & 0xffffffff
    set @p = cast(@crc as float) / 4294967296

    return round(((@max - @min) * @p) + @min, 0)
end
go


SELECT
      ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS s,
      char(dbo.fn_RandishInt(ROW_NUMBER() OVER (ORDER BY (SELECT 0)), 65, 66)) AS t
FROM
    sys.objects

это всегда даст одинаковые, случайные результаты.

2 голосов
/ 17 августа 2010

Создайте свою собственную функцию случайных чисел, которую вы можете использовать вместо Rand ().

CREATE VIEW dbo.RandomNumberView
AS
SELECT Rand() AS RandomNumber

GO

CREATE FUNCTION dbo.RandomNumber()
RETURNS float
AS
BEGIN
    RETURN (SELECT RandomNumber FROM dbo.RandomNumberView)
END
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...