use GlobalBase; --временные таблицы if OBJECT_id('dbo.#TTable') is not null drop table dbo.#TTable; go use GlobalBase; SET NOCOUNT ON DECLARE @tablename sysname; DECLARE @columnname sysname; declare @SRef binary(16); declare @TRef binary(16); declare @inSRef binary(16); declare @inTRef binary(16); declare @sql nvarchar(max); declare @sSRef nvarchar(34); declare @sTRef nvarchar(34); select TSource._IDRRef as [NewRef], TTarget._IDRRef as [OldRef] ,TSource._Description as NEW_Description, TTarget._Description as OLD_Description into dbo.#TTable from rl_distrib.dbo._Reference82 as TSource left join GlobalBase.dbo._Reference141 as TTarget on TSource._Description=TTarget._Description collate DATABASE_DEFAULT where TSource._IDRRef not in (select _IDRRef from GlobalBase.dbo._Reference141) and (not TTarget._IDRRef is null) and TSource._Description not in (select _Description from rl_distrib.dbo._Reference82 -- проверка на задвоенные значения group by _Description having count(_Description)>1) DECLARE cur_name CURSOR SCROLL FOR SELECT table_name=sysobjects.name, column_name=syscolumns.name --datatype=systypes.name, --length=syscolumns.length FROM sysobjects JOIN syscolumns ON sysobjects.id = syscolumns.id JOIN systypes ON syscolumns.xtype=systypes.xtype WHERE sysobjects.xtype='U' and systypes.name='binary' and syscolumns.length=16 and Right(syscolumns.name,3)='Ref' ORDER BY sysobjects.name,syscolumns.colid OPEN cur_name FETCH NEXT FROM cur_name INTO @tablename, @columnname while @@FETCH_STATUS = 0 BEGIN set @sSRef = Convert(nvarchar(34),CONVERT(char(34),@SRef,1)); set @sTRef = Convert(nvarchar(34),CONVERT(char(34),@TRef,1)); set @sql = N'update updateTarget set ' + @columnname + N'= tablesource.[NewRef] From GlobalBase.dbo.'+@tablename+N' AS updateTarget Join dbo.#TTable as tablesource on updateTarget.' + @columnname + N' = tablesource.[OldRef]'; --set @sql = 'select @TRef' -- EXEC (@sql ) EXEC sp_executesql @stmt = @sql; FETCH NEXT FROM cur_name INTO @tablename, @columnname END CLOSE cur_name DEALLOCATE cur_name if OBJECT_id('dbo.#TTable') is not null drop table dbo.#TTable; go
Saturday, March 3, 2012
Очень часто возникает ситуации, когда в 1с нужно исправить один уникальный идентификато на другой, особенно когда у вас есть 2 базы с одинаковыми наименование или кодами, этот код поможет быстро и правильно исправить и установить уникальный идентификатор.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment