当前位置: 代码迷 >> Sql Server >> SQL的游标 提示 在将 varchar 成数据类型 smallint 时失败解决办法
  详细解决方案

SQL的游标 提示 在将 varchar 成数据类型 smallint 时失败解决办法

热度:398   发布时间:2016-04-27 12:33:10.0
SQL的游标 提示 在将 varchar 成数据类型 smallint 时失败
declare @no char(6),@num smallint,@name char(20),@price money,@amount int
declare store_cursor cursor for 
select* from store.订购单明细 order by 单价 asc
open store_cursor 
print'订购单号 序号 产品名称 单价 数量'
fetch from store_cursor into @no,@num,@name,@price,@amount
while @@FETCH_STATUS=0
begin 
 print @[email protected][email protected][email protected][email protected]
 fetch from store_cursor into @no,@num,@name,@price,@amount
 end
 close store_cursor
 deallocate store_cursor

运行时老是提示 在将 varchar 值 'OR3111' 转换成数据类型 smallint 时失败,'OR3111'是订购单号,这些变量的类型是我在表里面定义的,如果把数据类型全改成char的话,只能出来三列 订购单号 序号 单价 ,这是为什么啊~~!!

------解决方案--------------------
SQL code
select* from store===>查询出的字段能和你游标变量接收的顺序一样么.....建议写select 具体字段 最好别用*
------解决方案--------------------
SQL code
print @[email protected][email protected][email protected][email protected]--你这个整体是个字符串类型的。但是里面有 @num 为smallint.还有后面的 @price,@amount 如果不转换也会报错。 SQL 自己没有做隐形转换。需要你自己做个转换print @no+convert(varchar(12),@num)[email protected]+convert(varchar(12),@price)+convert(varchar(12),@amount)
------解决方案--------------------
SQL code
--还有你的 char 类型如果对于的列值不够你这里定义的长度 ,后面会有对于的空格(系统自动添加补足)补足的。可能会得不到你想要的结果。建议用 varchar类型
  相关解决方案