как использовать имя переменной в качестве имени таблицы в операторе обновления - PullRequest
0 голосов
/ 28 июня 2019

У меня есть таблица (скажем, 'A'), которая содержит список всех таблиц в базе данных. Я определил курсор, который перебирает имя таблицы в 'A'. Я хочу обновить столбец таблицы, определенный в курсор.

Я создал 2 курсора. Один для итерации по именам таблиц и другой для итерации по именам столбцов.

DECLARE @MyCursor CURSOR;
DECLARE @MyField nvarchar(255);

BEGIN
SET @MyCursor = CURSOR FOR
select distinct Table_name from DataTable where Data <>'No'
set @a=0
OPEN @MyCursor 
FETCH NEXT FROM @MyCursor 
INTO @MyField

WHILE @@FETCH_STATUS = 0
BEGIN

    DECLARE @column_cursor CURSOR;
    DECLARE @columnField nvarchar(255);
    SET @column_cursor = CURSOR FOR
    select Column_name from DataTable where TABLE_NAME=@MyField and Data 
    <>'No'


        OPEN @column_cursor 
        FETCH NEXT FROM @column_cursor 
        INTO @columnField
        WHILE @@FETCH_STATUS = 0
        BEGIN


    update  @MyField set @columnField=''+@MyField+'_'+@columnField+@a
             FETCH NEXT FROM @column_cursor 
             INTO @columnField 
         END;
       CLOSE @column_cursor ;
       DEALLOCATE @column_cursor;
  FETCH NEXT FROM @MyCursor 
  INTO @MyField 
END; 

CLOSE @MyCursor ;
DEALLOCATE @MyCursor;

END;

Здесь в операторе обновления @MyField выдает ошибку: «Необходимо объявить переменную таблицы @MyField».

1 Ответ

0 голосов
/ 28 июня 2019

Вы находитесь на хорошем пути, но не можете использовать переменную в месте имени таблицы, вам нужно собрать команду обновления в переменной, а затем выполнить динамический sql. Вы можете увидеть: Создание динамического SQL-запроса

в вашем случае что-то вроде

declare @sqlCommand varchar(max)
declare @MyField varchar(255) = 'table_name' 
declare @columnField varchar(255) = 'column_NAME'
declare @columnValue varchar(255) = 'column_value'

set @sqlCommand = 'update '+ @MyField +' set '+@columnField+' = ' +@columnValue+ ' where 1=1;'
--select @sqlCommand
EXEC (@sqlCommand)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...