我正在为某种类型的大学编写数据库,并且有一个名为
的表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
任何想法如何?
答案 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