日期:2014-05-17  浏览次数:20611 次

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

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

------解决方案--------------------
引用: