导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

请 大家 看下这个 简单存储过程怪问题 ?

FSU 2008-01-10 12:30:07
===========存贮过程如下=============

ALTER PROCEDURE YG_UpdateKC

@aID int,
@HTH varchar(20),
@JH varchar(20),
@sl_th numeric(18, 2),--退回数量
@RKSL numeric(18,2)--实际入库数量


AS

UPDATE YG_RKD_MX_ini SET rkrq=getdate() WHERE aID=@aID AND JH=@JH AND HTH=@HTH
---------------插入库存
INSERT INTO YG_RKD_Mx
( aid, HTH, JH, MC, CPMC, SL, SL_JYHG, CZ,BTDJH,SL_JYRB,SL_JYBHG, DW,HH,YWYID,YWY,JYRQ,rkrq,bNew )
SELECT @aid, HTH, JH, MC, CPMC, SL_JYHG+SL_JYRB,SL_JYHG,CZ,BTDJH,SL_JYRB,SL_JYBHG, DW,HH,YWYID,YWY,JYRQ,rkrq,1
FROM YG_RKD_Mx_ini
WHERE (aID=@aID and JH=@JH AND HTH=@HTH) --ywzt=2 检

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

-================以上是存贮过程==============================

执行 exec YG_UpdateKC 802, 'YG07-207', 'GB9877.1-44.5×30×7F', 0, 11
结果:
(所影响的行数为 0 行)

(所影响的行数为 0 行)

如果把变量直接带入测试 则返回所要结果
UPDATE YG_RKD_MX_ini SET rkrq=getdate() WHERE aID=802 AND JH='GB9877.1-44.5×30×7F' AND HTH='YG07-207'

结果:(所影响的行数为 1 行)


=========================
为什么调用存贮过程执行后没有返回结果 ???
注:JH 数据字段长度 200,其他数据测试可以(测试了如果 JH='CEN305840' 正常),是否JH='GB9877.1-44.5×30×7F' 这个字符串有问题?有问题,该怎么处理
...全文
31 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pt1314917 2008-01-10

@JH varchar(20)这个变量的长度只有20,
而'GB9877.1-44.5×30×7F'这个的长度已经为21了。。很显然最后面一位F会被截除,最后过滤出来的结果肯定就不对了。楼主把这个20改大一点就行了。。
回复
FSU 2008-01-10
OK,明白 ,糊涂 一时
回复
pt1314917 2008-01-10

不是很有可能,而是确实是因为这个问题。
楼主可以试下
方法一:
declare @JH varchar(20)
set @jh='GB9877.1-44.5×30×7F'
select @jh

最后查出来的结果是:'GB9877.1-44.5×30×7'
F被截掉了。 。

方法二:
直接查这个字符串的长度:select datalength('GB9877.1-44.5×30×7F')
得到的结果为:21
也就是超过20了。很显然楼主定义的declare @JH varchar(20)是不够的。。

回复
JL99000 2008-01-10
INSERT INTO YG_RKD_Mx ( aid, HTH, JH, MC, CPMC, SL, SL_JYHG, CZ,BTDJH,SL_JYRB,SL_JYBHG,DW,HH,YWYID,YWY,JYRQ,rkrq,bNew )
SELECT @aid, HTH, JH, MC, CPMC, SL_JYHG+SL_JYRB,SL_JYHG,CZ,BTDJH,SL_JYRB,SL_JYBHG,DW,HH,YWYID,YWY,JYRQ,rkrq,1
FROM YG_RKD_Mx_ini WHERE (aID=@aID and JH=@JH AND HTH=@HTH) --ywzt=2 检

你检查一下通过[LECT @aid, HTH, JH, MC, CPMC, SL_JYHG+SL_JYRB,SL_JYHG,CZ,BTDJH,SL_JYRB,SL_JYBHG,DW,HH,YWYID,YWY,JYRQ,rkrq,1
FROM YG_RKD_Mx_ini WHERE (aID=@aID and JH=@JH AND HTH=@HTH)]取出的记录
是否能插入到表YG_RKD_Mx中的各个字段
回复
zlp321002 2008-01-10
的确很有可能1楼说的,参数长度问题.楼主按照1楼的测试下.
回复
zlp321002 2008-01-10
的确很有可能1楼说的,参数长度问题.楼主按照1楼的测试下.
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告