关于数据类型转换的问题~~!!
时间: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' 时溢出了整数列。
语句已终止。
馆藏数量: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啊
转换 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
另外,我本来就用的是bigint
作者: Renita 发布时间: 2011-12-03
一行行处理,虽然不是个什么好办法,但先把楼主程序修改如下:
SQL code
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28