请大家帮我看个sql的问题,(高手们帮我看看啊 快崩溃了 )(9分)

冰锋

Unregistered / Unconfirmed
GUEST, unregistred user!
这个存储过程是用来接收参数 ,插入表中的
IF EXISTS(select * from sysobjects where name='usp_insert_gx' and type='p')
DROP PROCEDURE usp_insert_gx
GO

CREATE PROCEDURE usp_insert_gx
@m_table varchar(100),@bh nvarchar(5),@ph nvarchar (7),@sh nvarchar (8),@pc numeric (18,3),
@sx nvarchar(10),@dh nvarchar (7),@rq datetime ,@zc nvarchar (5),@sr nvarchar (5),@bc char (4)
AS

DECLARE @sqlstr nvarchar(3000)
SET @sqlstr='INSERT INTO'+' '+@m_table+' '+'(F_CPBH,F_CPPH,F_CPSH,F_CPPC,F_CPSX,F_DJBH,F_ZDRQ,F_ZCGX,F_SRGX,F_GZBC)'+' '
+'values('+@bh+','+@ph+','+@sh+','+@pc+','+@sx+','+@dh+','+@rq+','+@zc+','+@sr+','+@bc+')'
EXEC(@sqlstr)
GO
然后传入参数:
EXECUTE usp_insert_gx 'RB200601','1','1','1',200,'1','1','2006-09-13','28','28','1'
执行的时候出现这样的问题 不知道是怎么回事 帮我看看
服务器: 消息 8115,级别 16,状态 6,过程 usp_insert_gx,行 8
将 nvarchar 转换为数据类型 numeric 时发生算术溢出错误。
 
+号,某个字符串被系统认为是numeric类型了.
在所有加项加一个类型强制转换试试
 
问题在你拼串的时候+@pc+这个地方出错了,@pc是numeric (18,3)类型的,你要把它转化成字符串类型才能用‘+’号拼串
 
是否要在传递参数时给字符串型的多加一层''?
 
好的 搞定了 cyee 说的 对 ,@pc是numeric (18,3)类型的 问题
 
1.语句SET @sqlstr='INSERT INTO'+' '+@m_table+' '+'(F_CPBH,F_CPPH,F_CPSH,F_CPPC,F_CPSX,F_DJBH,F_ZDRQ,F_ZCGX,F_SRGX,F_GZBC)'+' '
+'values('+@bh ','+@ph+','+@sh ','+@pc+','+@sx ','+@dh+','+@rq ','+@zc+','+@sr ','+@bc+')'
中@bh,@sh,@sx,@rq,@sr后少了“+”号
2.另外 @pc 为numeric (18,3),当做字符串连接时肯定会出错的
 
顶部