表格中某字段的默认值 如何随机生成?

IPC2008 2010-03-15 03:06:17
我建了一个表,但是其中有一个字段的值需要随机生成,范围是3.10-3.29
我想用自带的默认值规则,可是碰到了具体的操作问题。好像

我在本论坛找了一些SQL语句:

select cast(floor(rand()*100) as int)

select cast(rand()*100 as int)

select top 10 CAST(abs(checksum(newid())%500) AS SMALLINT) from sysobjects

用这样的函数,在sql里是可以执行的,并返回如期想要的结果
但把 cast(rand()*100 as int)往某个字段的默认值里一放,插入一条记录,他并不能插入随机值?

我对默认值规则限制也不是很了解,后来想到存储过程,触发器等等,但是也不知道是否可行?

请代码达人教教我!感谢先!







...全文
171 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bancxc 2010-03-17
  • 打赏
  • 举报
回复
神人出现了
liangCK 2010-03-17
  • 打赏
  • 举报
回复
CREATE TABLE tb(id int,val int,num numeric(10,2));
INSERT tb(id,val) VALUES(1,10);
INSERT tb(id,val,num) VALUES(2,20,3.23)
GO
CREATE VIEW v_Random
AS
SELECT random = NEWID()
GO
CREATE FUNCTION dbo.GetRandom()
RETURNS numeric(10,2)
AS
BEGIN
RETURN (SELECT (ABS(CHECKSUM(random)) % ((329 - 310 + 1) ) + 310) / 100.
FROM v_Random)
END
GO

ALTER TABLE tb ADD CONSTRAINT DF_num DEFAULT dbo.GetRandom() FOR num;

GO

INSERT tb(id,val) VALUES(3,30);
INSERT tb(id,val) VALUES(4,40);
SELECT * FROM tb;
GO

DROP TABLE tb;
DROP FUNCTION dbo.GetRandom;
DROP VIEW v_Random
dawugui 2010-03-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ipc2008 的回复:]
谢谢以上回答,但是并没有解决我的问题!

新建表格时设定默认值规则,但是我的表结构是事先就建好的,不能进行修改,也就是说我只能对那个随机字段进行操作,给默认值规则!

其次,默认值范围3.10-3.29 需要给出!

最后,是否能采用存储过程,触发器没有回答的!
我的意思是新增一条记录时,这个字段的值是随机在3.10-3.29之间产生!

继续等待......
[/Quote]
插入时直接用SQL语句即可.
select cast(3.00 + (abs(checksum(newid())) % 20 + 10)/100.0 as decimal(18,2))

/*

--------------------
3.23

(所影响的行数为 1 行)
*/

/*

--------------------
3.10

(所影响的行数为 1 行)
*/

/*

--------------------
3.28

(所影响的行数为 1 行)
*/
IPC2008 2010-03-16
  • 打赏
  • 举报
回复
谢谢以上回答,但是并没有解决我的问题!

新建表格时设定默认值规则,但是我的表结构是事先就建好的,不能进行修改,也就是说我只能对那个随机字段进行操作,给默认值规则!

其次,默认值范围3.10-3.29 需要给出!

最后,是否能采用存储过程,触发器没有回答的!
我的意思是新增一条记录时,这个字段的值是随机在3.10-3.29之间产生!

继续等待......
feixianxxx 2010-03-16
  • 打赏
  • 举报
回复
我想知道 范围是3.10-3.29
feixianxxx 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sql_sf 的回复:]
SQL code
if object_id('tb')is not null drop table tb
go
create table tb(ID int,num smallint default CAST(abs(checksum(newid())%500) AS SMALLINT))
insert tb(ID) select 1
insert tb(ID) select 2
se……
[/Quote]
checksun返回的值范围是多少
高佬192 2010-03-15
  • 打赏
  • 举报
回复
学习咯 谢谢拉
sql_sf 2010-03-15
  • 打赏
  • 举报
回复
if object_id('tb')is not null drop table tb
go
create table tb(ID int,num smallint default CAST(abs(checksum(newid())%500) AS SMALLINT))
insert tb(ID) select 1
insert tb(ID) select 2
select * from tb
/*
ID num
----------- ------
1 185
2 323
*/
--小F-- 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 josy 的回复:]
SQL code
create table test(name varchar(20),value as cast(floor(rand()*100) as int))
go

insert test(name) values('test')

select * from test

/**
name value
----------------……
[/Quote]]
学习
百年树人 2010-03-15
  • 打赏
  • 举报
回复
create table test(name varchar(20),value as cast(floor(rand()*100) as int))
go

insert test(name) values('test')

select * from test

/**
name value
-------------------- -----------
test 46

(1 行受影响)
**/
drop table test

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧