sql 在实际项目运用中发现的一个很奇怪的问题(包括子增长列和循环)

MarsD 2010-04-14 10:25:36
语句如下
declare @num int
select @num=count(*) from #tmp_add
declare @i int
select @i=1
while (@i<=@num)
begin
create table #tmp_deposit
(
id numeric(7,0) identity,
no int,
b_account varchar(32),
old_organ varchar(80)
)

......(写#tmp_deposit)

drop table #tmp_deposit

select @i=@i+1
end



这个语句在存储过程中使用超过一年最近报错,‘#tmp_deposit not found...',说这个表不存在,换了一个表明又恢复正常,小弟想查出其中的原因,防止问题的再次出现,哪位大侠遇到过这类似的问题,帮忙解决下,谢谢了

不知道sybase在创建表的时候有没次数限制,是不是运行到一定次数就会创建不成功。

PS:以上代码是在一个事务里面运行的。
...全文
168 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
MarsD 2010-04-16
  • 打赏
  • 举报
回复
继续顶,求高手
东那个升 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 marsd 的回复:]
额。。没看到sybase版块

创建的表不能在循环外面,我的语句没有完全拉出来,很长不方便,姑且认为逻辑必须在循环里面。
所以自增长列的表需要多次创建
[/Quote]


truncate table 会每次重置自增列的。
外面也不用担心的。
MarsD 2010-04-14
  • 打赏
  • 举报
回复
主要是sybase有没有这方面的限制?

大家有没有遇到过这种问题?
htl258_Tony 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 marsd 的回复:]
额。。没看到sybase版块

创建的表不能在循环外面,我的语句没有完全拉出来,很长不方便,姑且认为逻辑必须在循环里面。
所以自增长列的表需要多次创建
[/Quote]在数据库开发根目录下就有。
chuifengde 2010-04-14
  • 打赏
  • 举报
回复
1.有没有表变量,有可以用表变量
2.改为动态生成以I为后缀的临时表
MarsD 2010-04-14
  • 打赏
  • 举报
回复
额。。没看到sybase版块

创建的表不能在循环外面,我的语句没有完全拉出来,很长不方便,姑且认为逻辑必须在循环里面。
所以自增长列的表需要多次创建
htl258_Tony 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 htl258 的回复:]
mssql:


SQL code
declare @num int
select @num=count(*) from #tmp_add
declare @i int
select @i=1
while (@i<=@num)
begin
create table #tmp_deposit
(
id numeric……
[/Quote]modify

  create table #tmp_deposit   
(
id numeric(7,0) identity,
no int,
b_account varchar(32),
old_organ varchar(80)
)

declare @num int
select @num=count(*) from #tmp_add
declare @i int
select @i=1
while (@i<=@num)
begin

......(写#tmp_deposit)

truncate table #tmp_deposit

select @i=@i+1
end

drop table #tmp_deposit
手误
htl258_Tony 2010-04-14
  • 打赏
  • 举报
回复
mssql:

declare @num int   
select @num=count(*) from #tmp_add
declare @i int
select @i=1
while (@i<=@num)
begin
create table #tmp_deposit
(
id numeric(7,0) identity,
no int,
b_account varchar(32),
old_organ varchar(80)
)

......(写#tmp_deposit)

truncate table #tmp_deposit

select @i=@i+1
end

drop table #tmp_deposit
永生天地 2010-04-14
  • 打赏
  • 举报
回复
很奇怪的问题。置顶
Yang_ 2010-04-14
  • 打赏
  • 举报
回复
这样写嘛

  create table #tmp_deposit   
(
id numeric(7,0) identity,
no int,
b_account varchar(32),
old_organ varchar(80)
)

declare @num int
select @num=count(*) from #tmp_add
declare @i int
select @i=1
while (@i<=@num)
begin
truncate table #tmp_deposit -- sybase可能不支持这个语句,改用 delete from #tmp_deposit
......(写#tmp_deposit)


select @i=@i+1
end
chuifengde 2010-04-14
  • 打赏
  • 举报
回复
把创建表挪到循环外面去
csdyyr 2010-04-14
  • 打赏
  • 举报
回复
建议转到sybase版
MarsD 2010-04-14
  • 打赏
  • 举报
回复
sybase中存储过程
水族杰纶 2010-04-14
  • 打赏
  • 举报
回复
sybase
幫頂
Garnett_KG 2010-04-14
  • 打赏
  • 举报
回复
sybase 还是mssql?
iihero 2010-04-14
  • 打赏
  • 举报
回复
你的事务隔离级是多少来着?
shuifengcun 2010-04-14
  • 打赏
  • 举报
回复
好。支持。
MarsD 2010-04-14
  • 打赏
  • 举报
回复
而且sybase在事务里面也无法truncate
--小F-- 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 csdyyr 的回复:]
建议转到sybase版
[/Quote]

...
MarsD 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 ldslove 的回复:]
引用 10 楼 marsd 的回复:
额。。没看到sybase版块

创建的表不能在循环外面,我的语句没有完全拉出来,很长不方便,姑且认为逻辑必须在循环里面。
所以自增长列的表需要多次创建



truncate table 会每次重置自增列的。
外面也不用担心的。
[/Quote]

truncate table 不会重置自增列

我每次创建表就是为了重置自增列,大家有好的方法也可以告诉我

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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