mssql 2008 как скопировать диаграмму из одной базы в другую??

dimbasbear
Дата: 03.06.2011 12:34:33
Подскажите пожалуйста :(
pkarklin
Дата: 03.06.2011 12:48:27
Диаграмма - это всего лишь отображение объектов бд. Создайте в нужной бд новую и добавьте туда те же таблицы.
dimbasbear
Дата: 03.06.2011 12:49:14
pkarklin
Диаграмма - это всего лишь отображение объектов бд. Создайте в нужной бд новую и добавьте туда те же таблицы.


диаграмма большая, есть вероятность ошибиться. Желательно запрос как-то скопировать....:(
pkarklin
Дата: 03.06.2011 12:52:09
dimbasbear,

Нет никакого запроса. Ошибиться тут негде и не в чем. Наконец, добавьте все таблицы.
dimbasbear
Дата: 03.06.2011 12:52:20
dimbasbear
pkarklin
Диаграмма - это всего лишь отображение объектов бд. Создайте в нужной бд новую и добавьте туда те же таблицы.


диаграмма большая, есть вероятность ошибиться. Желательно запрос как-то скопировать....:(

тоесть запросом из одной базы в другую
invm
Дата: 03.06.2011 12:59:40
Диаграммы живут в таблице dtproperties. Перенесите ее содержимое.
Lithium
Дата: 06.12.2012 11:03:08
Меня тоже интересует способ копирования диаграмм.
Перенёс содержимое таблицы dtproperties из одной БД (с моей диаграммой) в другую, но, увы, это никак не отразилось на списке диаграмм в БД-получателе.
Кроме того, обнаружил, что при создании новой диаграммы количество записей в таблице dtproperties не изменяется.

сервер - Microsoft SQL Server Developer Edition 10.0.1600.22
ОС - Microsoft Windows NT 5.1 (2600)

Может что-то изменилось за прошедший год?
Maxx
Дата: 06.12.2012 12:56:23
включите прифайлер создайте новую диаграму и словите запрос .... заодно узнаете куда оно пишется
Вы уверены что на обоих серверах id обьектов совпадут ? Я очень в етом не уверен
Lithium
Дата: 06.12.2012 14:03:09
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 другой базы и зашифровать обратно.

Но это всё танцы с бубном, требуется штатный инструмент.
Glory
Дата: 06.12.2012 15:17:11
[dbo].[sysdiagrams]