看看我的数据库设计

来源:百度知道 编辑:UC知道 时间:2024/06/22 23:07:00
这是我在SQL SERVER2000的查询分析器上要求生成表的代码.
如下:
declare @i int , @code varchar(20) , @t datetime , @d int , @t1 datetime , @s sysname;
set @i=1;
set @t1='2007-1-1 0:0:0';
while (@i<=100)
begin
set @code=(select code from CE1001 where tmid=@i);
set @s='create table CE1001_'+@code+'(time datetime not null , date float)';
exec(@s);
set @t='2006-1-1 0:0:0';
while(@t<@t1)
begin
set @d=floor(15000000*rand())+1;
set @t=dateadd( ss , @d , @t );
set @s='insert into CE1001_'+@code+' values('+cast(@t as varchar(20))+' , '+cast(rand()*@d as varchar(20))+')';
exec(@s);
end
set @i=@i+1;
end

代码意图:
首先是生成100张表,其次要往这100张表中插入一年的数据(在程序中数据采用随机数的形式简单生成).由于可以预见的大量数据的问题所以就采用代码的的方式在查询分析其中做.

问题如下:
当代码写好之后执行分析查询按钮就没有事情(命令已成功完成),但是点击执行查询按钮后就有错误形式如下:

服务器: 消息 170,级别 15,状态 1,行 1
第 1 行

你的插入语句有错误,修改成
set @s='insert into CE1001_'+@code+' values('''+ cast(@t as varchar(20)) +''',' + cast(rand()*@d as varchar(20))+')'

组合字符串出错了,你只用了一个',最终形成的语句变成了
insert …… values(05 7 2006 9:47PM, ……
正确的应该是
insert …… values('05 7 2006 9:47PM',……

养成习惯在exec(@s)之前多写一条 print @s 可以在消息栏里获得你生成的SQL语句
,方便进行分析排错

我比你菜,以下是我的愚见,仅恭参考
根据提示,这几个都是一种类型的。所以你再仔细找找表中是否有数据类型声明的和插入的时候发生的错误。