Maxx,
Я тоже обратил внимание на ID, которые никогда не совпадут. Но попробовал, тем не менее, вдруг я чего-то не знаю....
при обновлении списка диаграмм профайлер выдаёт следующую последовательность запросов:
SELECT [DMTest2012-10-30].dbo.fn_diagramobjects()
use [DMTest2012-10-30]
declare @DiagramSPPath nvarchar(512)
select @DiagramSPPath = quotename(db_name()) + '.dbo.sp_helpdiagrams'
create table #tmp_sp_helpdiagrams
([Database] sysname not null, Name sysname not null, ID int not null, Owner sysname null, OwnerID int not null)
insert into #tmp_sp_helpdiagrams exec @DiagramSPPath
SELECT
tshd.Name AS [Name],
'Server[@Name=' + quotename(cast(serverproperty(N'Servername') as sysname),'''') +
']/Database[@Name=' + quotename(db_name(),'''') +
']/DatabaseDiagram[@Name=' + quotename(tshd.Name,'''') + ' and @OwnerID=' + quotename(cast(tshd.OwnerID as nvarchar(30)),'''') + ']'
AS [Urn],
tshd.OwnerID AS [OwnerID],
tshd.Owner AS [Owner]
FROM
#tmp_sp_helpdiagrams AS tshd
ORDER BY
[Name] ASC
drop table #tmp_sp_helpdiagrams
use [master]
при сохранении диаграммы примерно тот же запрос но встречается такое отличие:
...
exec dbo.[sp_creatediagram] @diagramname=N'Diagram1',@owner_id=1,@version=1,@definition=0xD0CF11E0A1B11AE10000000000................много-много всяких разных байтов следует
...
У меня сложилось впечатление, что какая-то своя тайная кухня тут при сборке поля Definition. Полагаю, что просто скопировать нельзя. Возможно нужно его расшифровать, переконвертировать на object_id другой базы и зашифровать обратно.
Но это всё танцы с бубном, требуется штатный инструмент.