Site icon Удаленный интернет помощник

MS SQL Server — замена значения поля (ID) по всей БД

На базе запроса по поиску GUID по всем таблицам БД можно написать запрос замены одного значения поля на другое:

Параметры:

@substr — значение исходного (найденного) параметра;

@substrnew — значение нового параметра;

@columnName — наименование поля, значение которого необходимо поменять.

Код скрипта:

set nocount on
declare @name varchar(128), @substr varchar(128), @column varchar(128), @substrnew varchar(128), @columnName varchar(128)
set @substr = 'DA32112F-0132-45F1-8D09-AE2E53B6A38D' --введите значение исходного параметра 
set @substrnew = 'F1362CE3-AC66-458D-B709-0A1EFD7C0CDE' --введите значение нового параметра 
set @columnName = 'OrganizationID' --наименование поля, значение которого необходимо поменять

create table #rslt 
(table_name varchar(128), field_name varchar(128), value uniqueidentifier)
declare s cursor for select '['+TABLE_SCHEMA+'].['+ table_name+']' as table_name from information_schema.tables where table_type = 'BASE TABLE'
and LEFT(table_name,8)<>'MSmerge_' --and TABLE_NAME='DocumentTypeExpressions'
order by table_name

open s
fetch next from s into @name
while @@fetch_status = 0
begin
declare c cursor for 
select column_name as column_name from information_schema.columns 
--where data_type in ('text', 'ntext', 'varchar', 'char', 'nvarchar', 'char', 'sysname') and table_name = @name
where data_type in ('uniqueidentifier') and '['+TABLE_SCHEMA+'].['+table_name+']' = @name
-- set @name = @name
open c
fetch next from c into @column
while @@fetch_status = 0
begin
print 'Processing table - ' + @name + ', column - ' + @column
exec('insert into #rslt select ''' + @name + ''' as Table_name, ''' + @column + ''', ' + @column + 
' from ' + @name + ' WITH (NOLOCK) where ' + @column + ' = ''' + @substr + '''')
fetch next from c into @column
end
close c
deallocate c
fetch next from s into @name
end
select 'update'+ ' ' + table_name+ ' ' +'set'+' '+ @columnName +'='+ ' '+ ''''+@substr+'''' +' '+'where'+ ' ' +@columnName+ '='+ ''''+@substrnew+'''' as "Скрипт для замены"
from #rslt
group by table_name, field_name
order by table_name, field_name
drop table #rslt
close s
deallocate s
Exit mobile version