欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

创建临时表报错,求匡正,立结贴

更新时间: 2014-01-05 02:17:12 责任编辑: Author_N1

 

创建临时表报错,求修正,立结贴

Alter procedure createdatelog

as
begin
create table #tb_kaoqin(userid nvarchar(50),username nvarchar(50))

declare @starttime datetime
declare @endtime datetime
declare @settime datetime
declare @sql varchar(100)
set @starttime='2014-01-01'
set @settime='2014-01-01'
set @endtime='2014-12-31'
while @starttime <@endtime 
begin
if @settime>=@endtime 
return 
set @settime=dateadd(dd,1,@settime)
set @sql='alter table #tb_kaoqin add ['+ Convert(varchar(10), @settime,120)+'] nvarchar(10)'
print @sql
exec (@sql)
select * from  #tb_kaoqin
end

end
go
exec createdatelog


(0 行受影响)
alter table #tb_kaoqin add [2014-04-14] nvarchar(10)

(0 行受影响)
alter table #tb_kaoqin add [2014-04-15] nvarchar(10)

(0 行受影响)
alter table #tb_kaoqin add [2014-04-16] nvarchar(10)

(0 行受影响)
alter table #tb_kaoqin add [2014-04-17] nvarchar(10)

(0 行受影响)
alter table #tb_kaoqin add [2014-04-18] nvarchar(10)
在执行批处理时出现错误。错误消息为: 引发类型为“System.OutOfMemoryException”的异常。



--参考方法--
你那是多少的SQL 版本,我在我自己电脑上执行可以的呢。不会报错,我的版本是08R2
--参考方法--
@starttime 没有任何变化,死循环耗尽Memory, 引发 “System.OutOfMemoryException”的异常。

--参考方法--
循环条件错了,我这里一直在加日期
--参考方法--
改成这样试试:

create procedure createdatelog

as
begin
create table #tb_kaoqin(userid nvarchar(50),username nvarchar(50))

declare @starttime datetime
declare @endtime datetime
declare @settime datetime
declare @sql varchar(100)
set @starttime='2014-01-01'
set @settime='2014-01-01'
set @endtime='2014-12-31'
while @settime <@endtime 
begin
--if @settime>=@endtime 
--return 
set @settime=dateadd(dd,1,@settime)
set @sql='alter table #tb_kaoqin add ['+ Convert(varchar(10), @settime,120)+'] nvarchar(10)'
print @sql
exec (@sql)
select * from  #tb_kaoqin

end

end
go
exec createdatelog

--参考方法--
引用:
循环条件错了,我这里一直在加日期

最后:
alter table #tb_kaoqin add [2014-12-29] nvarchar(10)
警告: 已经创建表 '#tb_kaoqin',但是它的最大行大小超过了允许的最大字节数 8060。如果得到的行超过此大小限制,则对此表的 INSERT 或 UPDATE 操作将失败。

--参考方法--
在你存储过程的21行后面加上下面一句

set @starttime= dateadd(d,1,@starttime)

--参考方法--
你要加365列?
--参考方法--
刚没仔细看,你的循环是死循环,改这样:

alter procedure createdatelog

as
set nocount on
begin
create table #tb_kaoqin(userid nvarchar(50),username nvarchar(50))
 
declare @starttime datetime
declare @endtime datetime
declare @settime datetime
declare @sql varchar(100)
set @starttime='2014-01-01'
set @settime='2014-01-01'
set @endtime='2014-12-31'

while @starttime <@endtime 
begin
if @settime>=@endtime 
return 

set @settime=dateadd(dd,1,@settime)
set @sql='alter table #tb_kaoqin add ['+ Convert(varchar(10), @settime,120)+'] nvarchar(10)'
print @sql
exec (@sql)
set @starttime=dateadd(dd,1,@starttime)----添加这句话
select * from  #tb_kaoqin
end

end
go
exec createdatelog

--参考方法--
不过我这里执行成功了,你的tempdb有限制?
ALTER procedure createdatelog
 
as
begin
create table #tb_kaoqin(userid nvarchar(50),username nvarchar(50))
 
declare @starttime datetime
declare @endtime datetime
declare @settime datetime
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:17:12
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/7990/
本文WWW.DOC100.NET DOC100.NET版权所有。