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

E m*_*mad 12 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,
Run Code Online (Sandbox Code Playgroud)

现在我想在此表中插入虚拟数据,但我不知道如何为布尔参数执行此操作.

PS.UD_BOOLEAN是

CREATE TYPE UD_BOOLEAN FROM BIT
Run Code Online (Sandbox Code Playgroud)

任何想法怎么样?

Mar*_*ith 22

您可以使用

CRYPT_GEN_RANDOM(1) % 2
Run Code Online (Sandbox Code Playgroud)

优点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 
Run Code Online (Sandbox Code Playgroud)

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


Jam*_*iec 8

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

SELECT CAST(ROUND(RAND(),0) AS BIT)
Run Code Online (Sandbox Code Playgroud)

但是,如果您生成多行,RAND()则每行将评估相同的值,因此请参阅Martin Smith的答案.

  • 出于这个原因,我很想删除这个答案.当我想到它时,我意识到这是一个糟糕的解决方案.羞耻它被接受了,而不是@MartinSmith的回答 (2认同)

Gor*_*off 5

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

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

newid()仅当您在单个语句中插入多行时才需要。