| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1013 人关注过本帖
标题:关于存储过程添加出错?
只看楼主 加入收藏
missking
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-4-8
收藏
 问题点数:0 回复次数:14 
关于存储过程添加出错?
本人编写了一段存储过程如下,对BookStateInfo表的添加出错了.
错误信息:---------------------------
Debugger Exception Notification
---------------------------
Project AppName.exe raised exception class EOleException with message '无法将 NULL 值插入列 'BookID',表 'lib.dbo.BookStateInfo';该列不允许空值。INSERT 失败。'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
我存储过程中已经对BookID做了处理了为什么还会出现这样的错误,我就很纳闷,希望哪位好心人帮我看一下到底错在哪里
create proc Insert_BookInfo
@ISDN varchar(10),
@BookName varchar(60),
@Author varchar(20),
@price float,
@Press varchar(50),
@PublishDate datetime,
@indate datetime,
@PressAddress varchar(50),
@PressTel varchar(20),
@BookState varchar(8),
@TotalStock integer
as
begin tran
declare @State varchar(10),@BookID varchar(13),@i integer,@BookStock integer,@tempBookID varchar(3)
set @BookStock=@TotalStock
set @i=1
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
insert into BookInfo(ISDN,BookName,Author,price,Press,PublishDate,indate,PressAddress,PressTel,BookState,BookStock,TotalStock)
values(@ISDN,@BookName,@Author,@price,@Press,@PublishDate,@indate,@PressAddress,@PressTel,@BookState,@BookStock,@TotalStock)
commit
GO
搜索更多相关主题的帖子: class continue message stopped 
2006-04-18 14:13
LouisXIV
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:789
专家分:0
注 册:2006-1-5
收藏
得分:0 
set @tempBookID=(convert(varchar(3),(select isnull(max(convert(int,right(BookID,len(BookID)-10))),0)+1
from BookStateInfo
where ISDN=@ISDN
)) )

用这个试试好了,原因可能出在图书信息内没有该ISDN的书

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

语法上是没错误了,不过功能上还是有点问题


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

表BookStateInfo只能添加一条记录


2006-04-18 14:40
LouisXIV
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:789
专家分:0
注 册:2006-1-5
收藏
得分:0 
你把transaction先卸下来看看。

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

收回上面的话,Transaction没有影响

所谓的只能添加一条记录具体是什么状况?


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

我现在把@BookID的长度改成14后,再调一下,当@TotalStock输入大于等于2时,BookStateInfo表中只有出现两条记录,本来就应该出现@TotalStock条记录


2006-04-18 22:42
LouisXIV
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:789
专家分:0
注 册:2006-1-5
收藏
得分:0 
你把这段

set @tempBookID=(convert(varchar(3),(select isnull(max(convert(int,right(BookID,len(BookID)-10))),0)+1

改成

set @tempBookID=(convert(varchar,(select isnull(max(convert(int,right(BookID,len(BookID)-11))),0)+1


2006-04-18 23:01
missking
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-4-8
收藏
得分:0 
还是一样没变化.仍旧输出两条记录

2006-04-19 08:08
missking
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-4-8
收藏
得分:0 
版主!为什么set @tempBookID=(convert(varchar(3),(select isnull(max(convert(int,right(BookID,len(BookID)-10))),0)+1
from BookStateInfo
where ISDN=@ISDN
)) )
而不是set @tempBookID=(convert(varchar(3),(select isnull(max(convert(int,right(BookID,len(BookID)-10))),0)
from BookStateInfo
where ISDN=@ISDN
)+1) )
我觉得应该先把值取出来再加1嘛.

2006-04-19 08:14
快速回复:关于存储过程添加出错?
数据加载中...
 
   



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

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