+ -
当前位置:首页 → 问答吧 → 关于数据类型转换的问题~~!!

关于数据类型转换的问题~~!!

时间:2011-12-03

来源:互联网

[size=12px][/size]我设计了两个表ISBN_Book和Book,其中Book表中的书号Book_id是由ISBN_Book表中的ISBN_id加两位编码实现的。例如ISBN_id为: 9787115221063
  馆藏数量:Book_count: 12
  则Book表中ISBN号为9787115221063的书有12本,其书号分别为:978711522106301,978711522106302,978711522106303....978711522106312

我设计了一个触发器,当往ISBN_Book里添加记录时,Book表自动生成记录,但是测试的时候,总是说有溢出,请各位好心人帮帮忙,找出我的问题,不胜感激~~

create trigger Insert_book
on ISBN_Book
after insert
as
begin
  declare @Iid char(13),@num smallint,@Bid char(15)--,@bid bigint
  select @Iid=ISBN_id,@num=Book_count from inserted
  --set @bid=convert(bigint,@Iid)*100
  set @bid=(cast(@Iid as bigint))*100
  while @num>0
  begin
  set @bid=@bid+1
  set @Bid=convert(char(15),@bid)
  insert into Book(ISBN_id,Book_id) values(@Iid,@Bid)
  set @num=@num-1
  end
end

insert into ISBN_Book values('9787115221063','数据库','SQL Server2008实战','JosephSack','人民邮电出版社',2010-2-1,34.00,3,3,'本书实用、高效、技巧性强,适用于专业人员,也适合初学者使用');

消息 248,级别 16,状态 1,过程 Insert_book,第 12 行
转换 varchar 值 '978711522106300' 时溢出了整数列。
语句已终止。

作者: Renita   发布时间: 2011-12-03

编号乘100干什么,。。

作者: ssp2009   发布时间: 2011-12-03

消息 248,级别 16,状态 1,过程 Insert_book,第 12 行
转换 varchar 值 '978711522106300' 时溢出了整数列。
语句已终止。


转换成BIGINT啊

作者: fredrickhu   发布时间: 2011-12-03

因为ISBN_id为char(13),Book_id为char(15),所以是将ISBN_id转换为bigint,再乘以100,循环加1得到Book_id的15位bigint类型,再转换为char(15)~~~~

另外,我本来就用的是bigint

作者: Renita   发布时间: 2011-12-03

一行行处理,虽然不是个什么好办法,但先把楼主程序修改如下:
SQL code
create table ISBN_book(ISBN_id varchar(13),class nvarchar(10),bookname nvarchar(200),Book_count int)
create table book(isbn_id varchar(13),book_id varchar(16)) --建议后加三位甚至更长,如果有上百本相同的书,两位不够
go
create trigger Insert_book
on ISBN_Book
for insert
as
begin
    declare @Iid varchar(13),@Num smallint,@bid smallint 
    select @Iid=ISBN_id,@Num=book_count from inserted
    set @bid=1
    while @bid<=@Num
    begin
        --以下按加三位处理
        insert into book(isbn_id,book_id)values(@Iid,@Iid+right('00'+ltrim(@bid),3))
        set @bid=@bid+1
    end
end
GO
insert into ISBN_Book values('9787115221063','数据库','SQL Server2008实战',12) --忽略其他列
select * from book
/*
isbn_id       book_id
------------- ----------------
9787115221063 9787115221063001
9787115221063 9787115221063002
9787115221063 9787115221063003
9787115221063 9787115221063004
9787115221063 9787115221063005
9787115221063 9787115221063006
9787115221063 9787115221063007
9787115221063 9787115221063008
9787115221063 9787115221063009
9787115221063 9787115221063010
9787115221063 9787115221063011
9787115221063 9787115221063012

(12 行受影响)

*/
go
DROP TABLE ISBN_book,book

作者: qianjin036a   发布时间: 2011-12-03

热门下载

更多