среда, 29 августа 2018 г.

Переименование схемы для представлений

Возникла задача переименования схемы для всех представлений, созданных в другой схеме. Да, можно в Object explorer details выделить все представления и с помощью search and replace переименовывать схемы, а потом запустить скрипт, но вот существует скрипт. Может, пригодится :)


declare      @endOfLine  char(2)       = char(13) + char(10)      ,@sql       nvarchar(max) = N''      ,@sqlCreate nvarchar(max) = N''      ,@view_name  nvarchar(128) = N''      ,@col_list   nvarchar(max) = N''      ,@view_id int = 0
;
select      o.object_id     ,o.name      ,replace(m.definition, 'schema1', 'schema2') as view_definition into 
    #view_info from 
    sys.objects     o
    inner join sys.schemas s on 
            s.schema_id = o. schema_id
     join sys.sql_modules m on 
            m.object_id = o.object_id where 
        s.name = 'schema1'        and 
        o.type      = 'V'

while exists(select top(1) object_id from #view_info) begin
    select top(1) @view_id = object_id from #view_info
    set @sqlCreate = '';     declare @error_view_name nvarchar(128) = '';
    select         @sqlCreate = view_definition,         @error_view_name = name      from         #view_info     where          object_id = @view_id      ;
    DELETE TOP (1) FROM #view_info      ;
    BEGIN TRY           exec sp_executesql @sqlCreate;     END TRY 
     BEGIN CATCH          print @error_view_name; 
     END CATCH 
--print @sqlCreate; ;
end
DROP TABLE #view_info



Комментариев нет:

Отправить комментарий