| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 722 人关注过本帖
标题:我的自动编号增加问题还是出错了
只看楼主 加入收藏
missking
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-4-8
收藏
 问题点数:0 回复次数:9 
我的自动编号增加问题还是出错了

我再解释一下我的程序,@ISDN是书号,@TotalStock是输入总共要录入的书的总量.编号BookID根据总量自动增加用@TotalStock来控制增加的本数.然后再添加@TotalStock条记录.
这是我的存储过程,昨天又写了一段代码,现在语法出错了
显示:在关键字 'insert' 附近有语法错误。希望高手看到后能回复一下,谢谢
create proc Insert_BookStateInfo
@ISDN varchar(10),
@TotalStock integer
as
begin tran
declare @State varchar(10),@BookID varchar(13),@i integer
set @i=1
while (@TotalStock>=@i)
begin
set @State='归还'
set @BookID=left(BookID,10)+(convert(varchar(3),(select max(convert(int,right(BookID,len(BookID)-10)))+1 from BookStateInfo where ISDN='AT-001-000' ))
insert into BookStateInfo(ISDN,BookID,State)
values(@ISDN,@BookID,@State)
set @i=@i+1
end
update BookInfo
set TotalStock=isnull(TotalStock,0)+@TotalStock
from BookInfo as a ,BookStateInfo as b
where a.ISDN=b.ISDN and b.ISDN=@ISDN
commit
搜索更多相关主题的帖子: 自动 
2006-04-13 13:47
LouisXIV
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:789
专家分:0
注 册:2006-1-5
收藏
得分:0 
Insert前面少了一个闭括号,以后写括号的时候注意点,一对一对配好写进去

2006-04-13 14:15
missking
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-4-8
收藏
得分:0 

哈哈.终于做出来了.非常感谢版主的帮忙.谢谢,谢谢,非常谢谢.
看来这个论坛还真是藏龙卧虎之地.以后要多来逛逛.
我做这个系统问题还是非常多的,希望各位前辈能够多多指教.


2006-04-14 11:17
LouisXIV
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:789
专家分:0
注 册:2006-1-5
收藏
得分:0 
这个不客气,问题自己想过了,解决了才有趣,你说呢?

此外这个SP中

set @State='归还'

与While循环无关,放在While前面比较好

2006-04-14 11:29
missking
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-4-8
收藏
得分:0 

嗯,对,不过还是有点问题.
本来如果已有的图书编号为AT-001-001-003
那么再增加一本按我刚才的代码就变成AT-001-001-4
而不是AT-001-001-004
这个应该怎么控制呢?


2006-04-14 12:02
LouisXIV
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:789
专家分:0
注 册:2006-1-5
收藏
得分:0 

先说一个无关的问题点
AT-001-001已经是10个字符的文字列了,你只截取10个文字列的话,后面的那个[-]没有影响吗?个人觉得改成11比较稳妥,不过你前面宣言的@BookID又是13,这点作为外人不能确定,最好再确认一下

其次,Access里有设定输入格式,但是sql里没有用过,刚才查了一下也没有看见能用的,折中方案如下

直到set @BookID语句为止不变,从set语句开始变更

下面是我测试的语句,自己试试看,如何修改,如何插入到自己的sp里去

declare @bookid varchar(14)
set @BookID=(convert(varchar,(select (convert(int,right('AT-001-001-003',len('AT-001-001-003')-11)))+1)))
while len(@bookid)<3
set @bookid='0'+@bookid
set @bookid=left('AT-001-001-003',11)+@bookid
select @bookid


2006-04-14 13:29
missking
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-4-8
收藏
得分:0 

版主,其实是这样的,我们导师给我的表中书号(ISDN)图书编号(BookID)都定义为10,后来我们发现这样定义不太好,因为书号是某一本书,而图书编号是区别同一本书的不同编号,所以我就把它改了,长度为14


2006-04-14 15:04
LouisXIV
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:789
专家分:0
注 册:2006-1-5
收藏
得分:0 

不过在你顶楼里写的sp中@bookid是被宣言为varchar(13)的吧。

不过程序这东西,说都是白说,能通过测试没有Bug就可以了。


2006-04-14 15:13
missking
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-4-8
收藏
得分:0 
哈哈,又调出来了,
谢谢,又是版主的功劳
这是我的代码.如果有兴趣供大家参考
create proc Insert_BookStateInfo
@ISDN varchar(10),
@TotalStock integer
as
begin tran
declare @State varchar(10),@BookID varchar(14),@i integer,@tempBookID varchar(3)
set @i=0
set @State='归还'
while (@TotalStock>@i)
begin
set @tempBookID=(convert(varchar(3),(select max(convert(int,right(BookID,len(BookID)-10)))+1
from BookStateInfo
where ISDN=@ISDN )) )
while (len(@tempBookID)<3)
set @tempBookID='0'+@tempBookID
set @BookID=@ISDN+'-'+@tempBookID
insert into BookStateInfo(ISDN,BookID,State)
values(@ISDN,@BookID,@State)
set @i=@i+1
end
update BookInfo
set TotalStock=isnull(TotalStock,0)+@TotalStock
from BookInfo as a ,BookStateInfo as b
where a.ISDN=b.ISDN and b.ISDN=@ISDN
update BookInfo
set BookStock=isnull(BookStock,0)+@TotalStock
from BookInfo as a ,BookStateInfo as b
where a.ISDN=b.ISDN and b.ISDN=@ISDN
commit

2006-04-14 15:15
missking
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-4-8
收藏
得分:0 

我想想不对,我就又把它改了.
现在想想书号ISDN也可以让它自动产生,如果让用户输入的话很容易出错


2006-04-14 15:25
快速回复:我的自动编号增加问题还是出错了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016276 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved