Преобразовать имя таблицы из нижнего регистра в верхний

В приведенном ниже сценарии показан пример запроса данных, которые были преобразованы из нижнего регистра, но он изменил данные только в одном столбце таблицы.

Use MYF601T
Go

UPDATE ROAD_LINE
SET NAM = UPPER(NAM)

Тем не менее, следующий скрипт, который я пытаюсь написать, - конвертировать все столбцы всех таблиц, но результат генерируется с ошибками.

Use MYF601T
Go

UPDATE INFORMATION_SCHEMA.TABLES
SET INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA = UPPER(INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA

Как это сделать для всех таблиц и всех столбцов внутри?

2 ответа

Используйте динамический запрос, чтобы обновить все содержимое столбца до upper дело.

запрос

declare @query varchar(max)

select @query =
stuff
(
    (
        select ';update ' + table_name + ' ' +
        'set ' + column_name + ' = upper(' + column_name + ')'
        from information_schema.columns
        where table_name = 'ROAD_LINE'
        order by table_name,column_name
        for xml path('')
     )
, 1, 1, '')

execute(@query);

Если по каким-либо причинам вы хотите преобразовать имена таблиц в верхний регистр, вы можете:

  • используйте курсор, который будет выбирать таблицы, которые вы хотите переименовать
  • цикл по списку таблиц
  • переименуйте его с помощью sp_rename или обновите

Обратите внимание, что вы должны обновить Select в курсоре в соответствии с вашими потребностями (выберите нужное имя столбца или таблицы, ...)

Это переименует таблицы:

declare @TABLE_NAME sysname, @TABLE_SCHEMA sysname
declare @TABLE sysname, @newName sysname
declare table_cursor Cursor
    For Select TABLE_NAME, TABLE_SCHEMA From INFORMATION_SCHEMA.TABLES Where TABLE_NAME like 'xyz%' -- and TABLE_SCHEMA like ...

open table_cursor
Fetch Next From table_cursor Into @TABLE_NAME, @TABLE_SCHEMA;

While @@FETCH_STATUS = 0
Begin
    Set @TABLE = quotename(UPPER(@TABLE_SCHEMA)) + '.' + quotename(UPPER(@TABLE_NAME))
    Set @newName = UPPER(@TABLE_NAME)
    print 'rename ' + @TABLE + ' to ' + @newName
    -- uncomment next like if you really want to rename them
    --exec sp_rename @TABLE, @newName
    Fetch Next From table_cursor Into @TABLE_NAME, @TABLE_SCHEMA;
End

Close table_cursor
Deallocate table_cursor

Если вы хотите обновить все столбцы xyz в таблице zyx, вы можете использовать это:

declare @TABLE_NAME sysname, @TABLE_SCHEMA sysname, @COLUMN_NAME sysname
declare @TABLE sysname, @sql nvarchar(max)
declare table_cursor Cursor
    For Select TABLE_NAME, TABLE_SCHEMA, COLUMN_NAME From INFORMATION_SCHEMA.COLUMNS 
    Where COLUMN_NAME like 'xxx' -- and data_type  '' ... and TABLE_NAME like 'xyz%' ...  and TABLE_SCHEMA like ...

open table_cursor
Fetch Next From table_cursor Into @TABLE_NAME, @TABLE_SCHEMA, @COLUMN_NAME;

While @@FETCH_STATUS = 0
Begin
    Set @TABLE = quotename(@TABLE_SCHEMA) + '.' + quotename(@TABLE_NAME)
    set @sql = 'Update ' + @TABLE + ' set ' + @COLUMN_NAME + ' = UPPER(' + @COLUMN_NAME + ')'
    print @sql
    -- uncomment next like if you really want to execute them
    --exec sp_executesql @sql
    Fetch Next From table_cursor Into @TABLE_NAME, @TABLE_SCHEMA, @COLUMN_NAME;
End

Close table_cursor
Deallocate table_cursor
Другие вопросы по тегам