首页 > 解决方案 > REPLACE 函数中的 SQL 使用变量

问题描述

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)) ;
        
        UPDATE testowa_tabela1
        SET query_transaction = REPLACE(query_transaction, '@min', '9999') 

        SET @vLiczba = @vLiczba + 1;
    END;

    PRINT 'Verified record: ' + CAST (@vLiczba as varchar(10)) + ', min value: ' + CAST (@min as varchar(10)) ;
END;

在第 14 行中REPLACE(query_transaction, '@min', '9999'),@min 不被视为变量。

你能帮我解决我的问题吗?REPLACE 语句在我检查时在循环中执行,但没有结果。

标签: sqlvariables

解决方案


你只需要去掉@min 周围的单引号。使用单引号时,变量被视为字符串,而不是变量。此外,您需要在更新后的语句后加一个分号。所以你更新的代码将是 -

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));
        
    UPDATE testowa_tabela1
       SET query_transaction = REPLACE( query_transaction,@min,'9999');
       SET @vLiczba = @vLiczba + 1;
    END;
    PRINT 'Verified record: ' + CAST (@vLiczba as varchar(10)) + ', min value: ' + CAST (@min as varchar(10)) ;
END;

推荐阅读