На базе запроса по поиску GUID по всем таблицам БД можно написать запрос замены одного значения поля на другое:
Параметры:
@substr — значение исходного (найденного) параметра;
@substrnew — значение нового параметра;
@columnName — наименование поля, значение которого необходимо поменять.
Код скрипта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 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 |