如何在sql server 2008中生成随机布尔值?

时间:2013-12-15 17:07:02

标签: sql sql-server sql-server-2008-r2

我正在为某种类型的大学编写数据库,并且有一个名为

的表
  

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

任何想法如何?

4 个答案:

答案 0 :(得分:21)

您可以使用

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 

会在第二列的所有行中给出相同的值

答案 1 :(得分:7)

如果您只生成一行,则可以使用以下简单的内容:

SELECT CAST(ROUND(RAND(),0) AS BIT)

但是,如果您要生成多行,RAND()将评估每行的相同值,请参阅Martin Smith's answer

答案 2 :(得分:4)

如果您希望第二列使用不同的值,则可以使用newid()。这是一个例子:

select cast((case when left(newid(), 1) between '0' and '7' then 1 else 0 end) as bit)

如果您在一个语句中插入多行,则只需要newid()

答案 3 :(得分:0)

另一个使用NEWID()的解决方案:

select ABS(CHECKSUM(NEWID())) % 2