Как генерировать случайное логическое значение в 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