2015-09-03 4 views
0

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

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

'INFORMATION_SCHEMA' являются ** ** представления каталога на системном уровне - вы ** НЕ ** непосредственно манипулировать те! Что вы на самом деле пытаетесь сделать здесь? –

+0

_ «результат сгенерирован с ошибками» _, если вы пишете что-то вроде этого, всегда включайте сообщение об ошибке –

+0

Нет, его просто то, что я хочу изменить все данные в нижнем регистре в верхний регистр. – RehanNoradibah

ответ

0

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

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

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

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

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 

Если вы хотите обновить все столбцы хуг в таблице 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 
+0

Прочитайте, что OP хочет достичь, он хочет получить данные UPPERCASE в таблице НЕ имя таблицы/столбца – lad2025

+1

спасибо, но не так очевидно, кроме одного комментария. Я добавил второй запрос, и они отвечают на оба типа вопроса. –

+0

Первый скрипт отлично работает ... Но второй изменит СОДЕРЖАНИЕ столбца. Не их имя – Madlozoz

0

Используйте динамический запрос, чтобы обновить все содержимое столбца до 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); 
Смежные вопросы