SQL REPLACE函数调用无法识别变量@min问题求助
问题根因
原代码第14行REPLACE函数的第二个参数使用了带单引号的'@min',属于字符串常量,SQL执行时只会替换query_transaction字段里字面内容为@min的文本,不会读取你之前声明的@min变量的实际值,因此无法达到预期的替换效果。
修复代码
需要把@min变量转成字符串类型后作为REPLACE的匹配参数,同时建议补充更新条件避免误改全表,修复后完整代码如下:
DECLARE @vLiczba int = 0, @vWynik varchar (30), @min int; BEGIN WHILE @vLiczba < 1 BEGIN SET @min = (SELECT MIN(RIGHT(LEFT(query_transaction, 36), 4)) FROM testowa_tabela1 WHERE query_transaction LIKE 'update%'); PRINT 'min value: ' + CAST (@min as varchar(10)) ; -- 修复点:去掉@min的单引号,转成字符串类型作为匹配参数,补充WHERE条件只改目标行 UPDATE testowa_tabela1 SET query_transaction = REPLACE(query_transaction, CAST(@min AS VARCHAR(4)), '9999') WHERE query_transaction LIKE 'update%' -- 可选,避免误改非update开头的记录 AND @min IS NOT NULL; -- 可选,无匹配min值时不执行更新 SET @vLiczba = @vLiczba + 1; END; PRINT 'Verified record: ' + CAST (@vLiczba as varchar(10)) + ', min value: ' + CAST (@min as varchar(10)) ; END;
可选优化
你当前代码的循环逻辑只会执行1次,可以直接去掉WHILE结构简化代码,不需要通过循环控制执行次数。
内容的提问来源于stack exchange,提问作者Mateusz
相关产品推荐
相关产品推荐

