为什么这个方法我写成存储过程怎么不行啊!
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是可变长度的。