Преобразовать имя таблицы из нижнего регистра в верхний
В приведенном ниже сценарии показан пример запроса данных, которые были преобразованы из нижнего регистра, но он изменил данные только в одном столбце таблицы.
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