请IronPromises斑竹来领分!顺便请大家帮我解决这个批处理问题!

treesman 2002-12-10 10:44:04
该批处理需要插入3000行数据,具体如下:
employee表格式:
emp_no(int,prim_key) emp_fname(char(25)) emp_lname(char(25)) dept_no(char(4)) address(char(100))
其中emp_no随机生成范围在1-5000之间,emp_fname:jane,emp_lname:jane,dept_no:d2,address:......。
这是我编的:
declare @i int,@emp_no int
declare @emp_fname char(25)
declare @emp_lname char(25)
declare @dept_no char(40)
declare @address char(100)
set @i=1
set @emp_fname='jane'
set @emp_lname='jane'
set @dept_no='d2'
set @address='......'
while
@i<3001
begin
set @emp_no=ceiling(rang(datepart(ms,getdate()))*10000)
insert into employee(emp_no,emp_fname,emp_lname,dept_no,address)
values(@emp_no,@emp_fname,@emp_lname,@dept_no,@address)
set @i=@i+1
end
问题总是出在有相同的KEY,我请教了IronPromises虽然解决了该问题(使用newid())可是这是在改变数据类型的基础上,但是emp_no int在设计数据库时是不可改变的!还请大家多多指教另外该帖主要分是给IronPromises的,呵呵因为总是打扰他(她)实在不好意思!不过我会另外开帖给各位参与此帖讨论的CSDN居民送分


...全文
29 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
treesman 2002-12-12
  • 打赏
  • 举报
回复
这个问题我是这样最后解决的,主要是IronPromises发来短消息提示我如何控制随机数在1-10000内就是用rand()*10000,我试着将该函数取代了(rand(datepart(ms,getdate()))*10000),结果统统测试成功,haiwer,crazyfor你们的方法我会测试一下!不知道为什么IronPromises不来接分?既然如此我就将这些分给haiwer,crazyfor两位了!请IronPromises谅解。
昵称被占用了 2002-12-12
  • 打赏
  • 举报
回复
不对呀:
rand()*10000的范围是 [0,10000)
rand()*5000的范围是 [0,5000)
ceiling(rand()*5000)的范围是 [0,5000)的整数

你要1-5000,就应该是:1+ceiling(rand()*5000)
CrazyFor 2002-12-10
  • 打赏
  • 举报
回复
begin
set @emp_no=1+ceiling(rand(10000*datepart(ms,getdate()))*5001)
if (select count(emp_no) from employee where emp_no=@emp_no)=0
begin
insert into employee(emp_no,emp_fname,emp_lname,dept_no,address)
values(@emp_no,@emp_fname,@emp_lname,@dept_no,@address)
set @i=@i+1
end
end
昵称被占用了 2002-12-10
  • 打赏
  • 举报
回复
begin
set @emp_no=ceiling(rang(datepart(ms,getdate()))*10000)
insert into employee(emp_no,emp_fname,emp_lname,dept_no,address)
values(@emp_no,@emp_fname,@emp_lname,@dept_no,@address)
set @i=@i+1
end
---->

begin
set @emp_no=1+ceiling(rand(10000*datepart(ms,getdate()))*5000)
if not exists (select * from employee where emp_no=@emp_no)
begin
insert into employee(emp_no,emp_fname,emp_lname,dept_no,address)
values(@emp_no,@emp_fname,@emp_lname,@dept_no,@address)
set @i=@i+1
end
end

22,209

社区成员

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

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