Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 mssql 2008 как скопировать диаграмму из одной базы в другую??  [new]
dimbasbear
Member

Откуда:
Сообщений: 328
Подскажите пожалуйста :(
3 июн 11, 12:34    [10758242]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008 как скопировать диаграмму из одной базы в другую??  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Диаграмма - это всего лишь отображение объектов бд. Создайте в нужной бд новую и добавьте туда те же таблицы.
3 июн 11, 12:48    [10758356]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008 как скопировать диаграмму из одной базы в другую??  [new]
dimbasbear
Member

Откуда:
Сообщений: 328
pkarklin
Диаграмма - это всего лишь отображение объектов бд. Создайте в нужной бд новую и добавьте туда те же таблицы.


диаграмма большая, есть вероятность ошибиться. Желательно запрос как-то скопировать....:(
3 июн 11, 12:49    [10758362]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008 как скопировать диаграмму из одной базы в другую??  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
dimbasbear,

Нет никакого запроса. Ошибиться тут негде и не в чем. Наконец, добавьте все таблицы.

Сообщение было отредактировано: 3 июн 11, 12:52
3 июн 11, 12:52    [10758385]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008 как скопировать диаграмму из одной базы в другую??  [new]
dimbasbear
Member

Откуда:
Сообщений: 328
dimbasbear
pkarklin
Диаграмма - это всего лишь отображение объектов бд. Создайте в нужной бд новую и добавьте туда те же таблицы.


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

тоесть запросом из одной базы в другую
3 июн 11, 12:52    [10758388]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008 как скопировать диаграмму из одной базы в другую??  [new]
invm
Member

Откуда: Москва
Сообщений: 9824
Диаграммы живут в таблице dtproperties. Перенесите ее содержимое.
3 июн 11, 12:59    [10758436]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: mssql 2008 как скопировать диаграмму из одной базы в другую??  [new]
Lithium
Member

Откуда: Волгодонск
Сообщений: 28
Меня тоже интересует способ копирования диаграмм.
Перенёс содержимое таблицы dtproperties из одной БД (с моей диаграммой) в другую, но, увы, это никак не отразилось на списке диаграмм в БД-получателе.
Кроме того, обнаружил, что при создании новой диаграммы количество записей в таблице dtproperties не изменяется.

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

Может что-то изменилось за прошедший год?
6 дек 12, 11:03    [13586219]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008 как скопировать диаграмму из одной базы в другую??  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
включите прифайлер создайте новую диаграму и словите запрос .... заодно узнаете куда оно пишется
Вы уверены что на обоих серверах id обьектов совпадут ? Я очень в етом не уверен
6 дек 12, 12:56    [13587469]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008 как скопировать диаграмму из одной базы в другую??  [new]
Lithium
Member

Откуда: Волгодонск
Сообщений: 28
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 другой базы и зашифровать обратно.

Но это всё танцы с бубном, требуется штатный инструмент.
6 дек 12, 14:03    [13588029]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008 как скопировать диаграмму из одной базы в другую??  [new]
Glory
Member

Откуда:
Сообщений: 104751
[dbo].[sysdiagrams]
6 дек 12, 15:17    [13588640]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008 как скопировать диаграмму из одной базы в другую??  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Копировал между базами нужные записи из таблицы sysdiagrams. ОК.
6 дек 12, 17:29    [13589738]     Ответить | Цитировать Сообщить модератору
 Re: mssql 2008 как скопировать диаграмму из одной базы в другую??  [new]
Lithium
Member

Откуда: Волгодонск
Сообщений: 28
Программист-Любитель
Копировал между базами нужные записи из таблицы sysdiagrams. ОК.

Вчера то же пробовал так, но при открытии скопированной диаграммы получал сообщение об ошибке "The docfile has been corrupted."
Тогда сделал простой запросик
begin tran
	declare @diagname	nvarchar(255)	= 'Contracts',
		@definition	varbinary(max),
		@owner_id	integer,
		@version	integer

	select
		@diagname	= name,
		@owner_id	= principal_id,
		@version	= version,
		@definition	= definition
	from
		[dmtest2012-10-30].[dbo].[sysdiagrams]
	where
		Name = @diagname

	if @diagname is not null
		exec [dmtest2012-09-24].[dbo].[sp_creatediagram]
			@diagramname	= @diagname,
			@owner_id	= @owner_id,
			@version	= @version,
			@definition	= @definition
commit tran
и заработало!

Glory
[dbo].[sysdiagrams]
Спасибо за наводку.
7 дек 12, 08:56    [13591716]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить