有一个存储过程,无法查找出原因,还请大侠们帮看看:
1.存在一个表ANSWERLOG_test,这个表记录了所有的记录,表的结构为以ID(自增)为主键,保存回复的记录,有一列为提交回复的时期
2.按表里的记录的日期把表分成对应月份的表,比如2008年9月的记录生成一个表,生成的表名为ANSWERLOG_test200809(表里的日期为varchar类型)
3.生成的表是从当月的上一个月开始的,每个月都生成一个表
4.生成了一个表后就把原来的ANSWERLOG_test表中的相应记录删除掉.比如生成了ANSWERLOG_test200809这个新表后就把原表中2008年9月的内容删除,这样原来的表只记录着当月的记录
5.用存储过程实现.
以下是我写的存储过程:
CREATE procedure fff as
declare @ncount int--计算除了本月外的记录行数
declare @insesql varchar(200)--插入语句
declare @delsql varchar(200)--删除语句
declare @compasql varchar(20)--当月日期的年月,如2008-12
declare @suffixdate varchar(10)--生成新表的后缀
set @insesql=''
set @delsql=''
select @compasql=convert(varchar,year(getdate()))+'-'+convert(varchar,month(getdate()))
select @ncount=count(*) from ANSWERLOG_test where not exists(select vote_time from ANSWERLOG_test where vote_time like '@compasql*')
while(@ncount>0)
begin
select top 1 @suffixdate=substring(ANSWERLOG_test.vote_time,1,4)+substring(ANSWERLOG_test.vote_time,6,2) from ANSWERLOG_test where not exists(select
vote_time from ANSWERLOG_test where vote_time like '@compasql*')
set @insesql='select * into ANSWERLOG_test'+@suffixdate+' from ANSWERLOG_test where vote_time like '''+@suffixdate+''''
set @delsql='delete from ANSWERLOG_test where vote_time like '''+@suffixdate+''''
exec(@insesql)
exec(@delsql)
select @ncount=count(*) from ANSWERLOG_test where not exists(select vote_time from ANSWERLOG_test where vote_time like '@compasql*')
end
GO
现在的问题就出在只有新的第一个表能建立起来,但是为空,然后报错:数据库中已存在名为 'ANSWERLOG_test200709' 的对象。(测试的表的数据的最近一个月是2007年9月)
1.存在一个表ANSWERLOG_test,这个表记录了所有的记录,表的结构为以ID(自增)为主键,保存回复的记录,有一列为提交回复的时期
2.按表里的记录的日期把表分成对应月份的表,比如2008年9月的记录生成一个表,生成的表名为ANSWERLOG_test200809(表里的日期为varchar类型)
3.生成的表是从当月的上一个月开始的,每个月都生成一个表
4.生成了一个表后就把原来的ANSWERLOG_test表中的相应记录删除掉.比如生成了ANSWERLOG_test200809这个新表后就把原表中2008年9月的内容删除,这样原来的表只记录着当月的记录
5.用存储过程实现.
以下是我写的存储过程:
CREATE procedure fff as
declare @ncount int--计算除了本月外的记录行数
declare @insesql varchar(200)--插入语句
declare @delsql varchar(200)--删除语句
declare @compasql varchar(20)--当月日期的年月,如2008-12
declare @suffixdate varchar(10)--生成新表的后缀
set @insesql=''
set @delsql=''
select @compasql=convert(varchar,year(getdate()))+'-'+convert(varchar,month(getdate()))
select @ncount=count(*) from ANSWERLOG_test where not exists(select vote_time from ANSWERLOG_test where vote_time like '@compasql*')
while(@ncount>0)
begin
select top 1 @suffixdate=substring(ANSWERLOG_test.vote_time,1,4)+substring(ANSWERLOG_test.vote_time,6,2) from ANSWERLOG_test where not exists(select
vote_time from ANSWERLOG_test where vote_time like '@compasql*')
set @insesql='select * into ANSWERLOG_test'+@suffixdate+' from ANSWERLOG_test where vote_time like '''+@suffixdate+''''
set @delsql='delete from ANSWERLOG_test where vote_time like '''+@suffixdate+''''
exec(@insesql)
exec(@delsql)
select @ncount=count(*) from ANSWERLOG_test where not exists(select vote_time from ANSWERLOG_test where vote_time like '@compasql*')
end
GO
现在的问题就出在只有新的第一个表能建立起来,但是为空,然后报错:数据库中已存在名为 'ANSWERLOG_test200709' 的对象。(测试的表的数据的最近一个月是2007年9月)
解决方案 »
- 将对象从microsoft sql server 复制到microsoft sqlserver 时失败
- SQLSERVER里如何剔除:字符串中除了数字的字符,另外如何剔除除了大小写字母的字符
- 请问一个求和后sum()精度被改变的问题,谢谢
- 关于如何将文本文件导入到sqlserver中
- sqlserver 2000 关于Null的过滤
- [供应] 进销存管理系统源码
- 合并复制只下载更改不上载更改是什么原因?
- 求助一查询语句
- 网站投票系统中,出现的问题!!
- 对数据库中的两个表,能不能用sql语句直接操作image字段?
- 大家好,有谁精懂MSSQL的呢,因我网站遇到这个难题?
- 请教一个备份的问题,急。在线等。
drop table ANSWERLOG_test200709
例如
declare @tb as varchar(20)
set @tb = 'ANSWERLOG_test200709'exec('if object_id(''db..' + @tb + ''') is not null drop table ' + @tb + '')
set @delsql='delete from ANSWERLOG_test where vote_time like '''+@suffixdate+''''--这两句like 后未加通配符,未找到任何记录,所以存的表为空.也未删除任何记录,造成第二重循环时,@suffixdate值未改变,故造成表名重复.--加上通配符应该就可以了
[/code]