日期:2014-05-19  浏览次数:20566 次

为什么这个方法我写成存储过程怎么不行啊!
EXEC   pr_EedCarRule   10, 'C '   --这样调用存储过程不能更新数据

CREATE   PROCEDURE   pr_EedCarRule
@cCarId   CHAR(10),
@cRule   CHAR(10)
AS
BEGIN
    DECLARE   @Count   INT
    SELECT   @Count   =     count(1)   FROM   CAR_RULE   WHERE   CARID   =   @cCarId
    IF   (@Count> 0)
        BEGIN
          IF   EXISTS   (SELECT   1   FROM   CAR_RULE   WHERE   CHARINDEX(@cRule,RULEINFO)> 0)
              UPDATE   CAR_RULE   SET   RULEINFO   =   REPLACE(RULEINFO,@cRule, ' ')
              WHERE   CARID   =   @cCarId
        END
END
--这样就可以更新数据
IF   EXISTS   (SELECT   1   FROM   CAR_RULE   WHERE   CHARINDEX( 'C ',RULEINFO)> 0)  
UPDATE   CAR_RULE   SET   RULEINFO   =   REPLACE(RULEINFO, 'C ', ' ')
WHERE   CARID   =   10

--怎么改上面的存储过程啊!!?

------解决方案--------------------

@cCarId CHAR(10),
@cRule CHAR(10)
改成

@cCarId VARCHAR(10),
@cRule VARCHAR(10)

------解决方案--------------------
CREATE PROCEDURE pr_EedCarRule
@cCarId CHAR(10),
@cRule CHAR(10)

改成

CREATE PROCEDURE pr_EedCarRule
@cCarId int,
@cRule varCHAR(10)
------解决方案--------------------
CHARINDEX(@cRule,RULEINFO)> 0

@cRule CHAR(10) 这个 @cRule 结果是 'C ' 换成Haiwer(海阔天空) 的就可以了
------解决方案--------------------
哦,我知道了,CHAR是固定长度的,你定义了CHAR的长度为10,查找的时候就是根据10个长度的字符来查找的,所以和‘C '有区别,而VARCHAR是可变长度的。