Как генерировать случайное логическое значение в SQL Server 2008?
Я пишу базу данных для какого-то университета, и есть таблица с именем
Contact_Assign Его параметры:
Is_Instructor UD_BOOLEAN NOT NULL,
Is_TeacherAssistant UD_BOOLEAN NOT NULL,
Is_Student UD_BOOLEAN NOT NULL,
Registration_ID UD_ID NOT NULL,
Contact_ID UD_ID NOT NULL,
теперь я хочу вставить фиктивные данные в эту таблицу, но я понятия не имею, как это сделать для логических параметров.
PS. UD_BOOLEAN
CREATE TYPE UD_BOOLEAN FROM BIT
любая идея как?
Ответы
Ответ 1
Если вы генерируете только одну строку, вы можете использовать что-то простое:
SELECT CAST(ROUND(RAND(),0) AS BIT)
Однако, если вы генерируете более одной строки, RAND()
будет оценивать одно и то же значение для каждой строки, поэтому см. ответ Мартина Смита.
Ответ 2
Вы можете использовать
CRYPT_GEN_RANDOM(1) % 2
Преимущества перед RAND
заключаются в том, что он более критический (вам может быть не все равно) и что при вставке нескольких строк он переоценивается для каждой строки.
DECLARE @T TABLE(
B1 BIT,
B2 BIT);
INSERT INTO @T
SELECT TOP 10 CRYPT_GEN_RANDOM(1)%2,
CAST(ROUND(RAND(), 0) AS BIT)
FROM master..spt_values
SELECT *
FROM @T
даст одинаковое значение во всех строках для второго столбца
Ответ 3
Если вы хотите другое значение для второго столбца, вы можете использовать newid()
. Вот пример:
select cast((case when left(newid(), 1) between '0' and '7' then 1 else 0 end) as bit)
Вам понадобится только newid()
, если вы вставляете более одной строки в один оператор.
Ответ 4
Похож на ответ Гордона, но немного короче:
select ABS(CHECKSUM(NEWID())) % 2