Как использовать переменную в операторе обновления в SQL - PullRequest
0 голосов
/ 20 сентября 2019

У меня большая проблема.Я кодирую просто оператор обновления, но использую переменную для набора.Вот код:

DECLARE @VAR1 nvarchar(255) = 'PRIMARYNAME'
DECLARE @VAR2 nvarchar(255) = 'ANDREW'
DECLARE @counter INT = 5


    WHILE @counter <> 0
    BEGIN   
        PRINT 'PRE VAR1: '+@VAR1
        PRINT 'PRE VAR2: '+@VAR2    
        UPDATE [TABTARGET]
        SET @VAR1 = @VAR2   
        PRINT 'POST VAR1: '+@VAR1
        PRINT 'POST VAR2: '+@VAR2 
        SET @counter = @counter -1
    END

А вот и вывод:

PRE VAR1: PRIMARYNAME
PRE VAR2: ANDREW

(5 rows affected)
POST VAR1: ANDREW
POST VAR2: ANDREW
PRE VAR1: ANDREW
PRE VAR2: ANDREW

Поскольку вы видите инструкцию set вместо значения переменной, сделайте присваивание.Как избежать этих проблем?Мне нужно использовать переменную, потому что обновление строится с помощью динамического объявления SQL.

Спасибо всем

1 Ответ

2 голосов
/ 20 сентября 2019

Это невозможно, если вы не используете строку sql.

DECLARE @VAR1 nvarchar(255) = 'PRIMARYNAME'
DECLARE @VAR2 nvarchar(255) = 'ANDREW'
DECLARE @strSQL nvarchar(255) 
DECLARE @counter INT = 5


    WHILE @counter <> 0
    BEGIN   
        PRINT 'PRE VAR1: '+@VAR1
        PRINT 'PRE VAR2: '+@VAR2    

        SET @strSQL = N'UPDATE test
        SET name = @VAR1'   
        PRINT @strSQL
        exec sp_executesql @strSQL , N'@VAR1 nvarchar(255)', @VAR1
        PRINT 'POST VAR1: '+@VAR1
        PRINT 'POST VAR2: '+@VAR2 
        SET @counter = @counter -1
    END

Если вы @ VAR1 - динамический столбец, используйте его вместо этого.

DECLARE @VAR1 nvarchar(255) = 'PRIMARYNAME'
DECLARE @VAR2 nvarchar(255) = 'ANDREW'
DECLARE @strSQL nvarchar(255) 
DECLARE @counter INT = 5


    WHILE @counter <> 0
    BEGIN   
        PRINT 'PRE VAR1: '+@VAR1
        PRINT 'PRE VAR2: '+@VAR2    

        SET @strSQL = N'UPDATE test
        SET  '+ QUOTENAME(@VAR1) + ' = @VAR2'   
        PRINT @strSQL
        exec sp_executesql @strSQL , N'@VAR1 nvarchar(255), @VAR2 nvarchar(255)', @VAR1, @VAR2
        PRINT 'POST VAR1: '+@VAR1
        PRINT 'POST VAR2: '+@VAR2 
        SET @counter = @counter -1
    END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...