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

Откуда:
Сообщений: 205
Знаю что данная тема здесь уже неоднократно здесь обсуждалась, однако способа решения своей задачи так и не нашел...

Задача состоит в получении скрипта который:
1. создаст указанные объекты БД (таблицы, представления, процедуры....)
2. наполнит данными таблицы-справочники

С п.2 проблем нет, зато вот с 1 пунктом возникает куча трудностей

Сначала пробовал Generate Script - однако полученный скрипт не выполнялся, вываливается целая куча ошибок типа: Недопустимое имя объекта "<...>", Недопустимый объект. Для "<...>" не разрешены расширенные свойства, либо объект не существует.
Думаю что это из-за того что скрипте не учитывается очередность создания объектов БД.
Вручную регулировать очередность создания не вариант.

Потом почитав ФАК "Скрипт создания всех объектов БД программно"
попробовал утилиту SQLDMOScripter [url=]https://www.sql.ru/forum/actualthread.aspx?tid=489369

полученный скрипт при выполнении также выдавал огромное количество различных ошибок...

Может я чтото не так делаю с Generate Script?
Как быть???

Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
Nov 24 2008 13:01:59
Copyright (c) 1988-2005 Microsoft Corporation
Express Edition on Windows NT 5.1 (Build 2600: Service Pack 2)
17 июн 09, 17:28    [7312005]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания объектов БД  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36803
https://www.sql.ru/faq/faq_topic.aspx?fid=805
17 июн 09, 17:29    [7312012]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания объектов БД  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mifich

Вручную регулировать очередность создания не вариант.

Конечно не вариант. Это суровая необходимость. Потому что никто кроме вас регулировать очередность не будет.
17 июн 09, 17:30    [7312025]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания объектов БД  [new]
Mifich
Member

Откуда:
Сообщений: 205
Может какая-нибудь утилита умеет выстраивать очередность создания зависимых объектов?
или всетаки ручная сортировка рулит?
17 июн 09, 17:42    [7312124]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания объектов БД  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mifich
Может какая-нибудь утилита умеет выстраивать очередность создания зависимых объектов?
или всетаки ручная сортировка рулит?

А откуда по-вашему эта утилита могла бы получить информацию о зависимостях объектов ?
17 июн 09, 17:45    [7312147]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания объектов БД  [new]
Mifich
Member

Откуда:
Сообщений: 205
Glory,

только анализируя тексты процедур, функций и тригеров
17 июн 09, 17:49    [7312174]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания объектов БД  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Mifich
Может какая-нибудь утилита умеет выстраивать очередность создания зависимых объектов?
или всетаки ручная сортировка рулит?
А не надо было создавать процедуры, которые обращаются к несуществующим объектам!
Они-то создались, но в таблицу зависимостей ничего не прописалось.
Об этом сервер честно сообщает в таком случае.
17 июн 09, 17:49    [7312178]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания объектов БД  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mifich
Glory,

только анализируя тексты процедур, функций и тригеров

Т.е. разбором множества произвольных текстов ?
17 июн 09, 17:51    [7312198]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания объектов БД  [new]
Mifich
Member

Откуда:
Сообщений: 205
Glory

Т.е. разбором множества произвольных текстов ?

Я понимаю что это практически нереально...
Но ведь, задача генерирования "правильного" скрипта создания объектов уже наверняка много раз решалась, подскажите куда копать
17 июн 09, 17:56    [7312238]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания объектов БД  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3200
Visual Studio 2008 Database Edition, помимо всего прочего, умеет вычислять зависимости и корректно генерит как полный скрипт создания схемы, так и дифф-скрипты при сравнении двух БД.

Цена вот только на нее кусачая...
17 июн 09, 18:01    [7312272]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания объектов БД  [new]
Mifich
Member

Откуда:
Сообщений: 205
iap
А не надо было создавать процедуры, которые обращаются к несуществующим объектам!


для процедур то проблема решаема: сначала создаем таблицы, представления итд, а в конце процедуры,но как быть с очередностью создания функций, где одна может вызываться из другой
17 июн 09, 18:02    [7312277]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания объектов БД  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mifich
Glory

Т.е. разбором множества произвольных текстов ?

Я понимаю что это практически нереально...
Но ведь, задача генерирования "правильного" скрипта создания объектов уже наверняка много раз решалась, подскажите куда копать

Вы заходите не с того конца.
Изначально скрипты создания всех объектов должны храниться в специальном ПО. Которое будет отвечать и за порядок, и за версионность и еще за много вопросов, которые возникают в большом проекте
17 июн 09, 18:04    [7312295]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания объектов БД  [new]
Mifich
Member

Откуда:
Сообщений: 205
Спасибо, если с Visual Studio 2008 Database Edition не получится, прийдется лопатить вручную
17 июн 09, 18:18    [7312366]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания объектов БД  [new]
Сергей Мишин
Member

Откуда:
Сообщений: 376
Mifich
для процедур то проблема решаема: сначала создаем таблицы, представления итд, а в конце процедуры,но как быть с очередностью создания функций, где одна может вызываться из другой


может sys.sql_dependencies поможет? а также sys.syscomments и т.д.
17 июн 09, 18:37    [7312443]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания объектов БД  [new]
Сергей Мишин
Member

Откуда:
Сообщений: 376
что то типа этого:
WITH c AS (
	SELECT
		id, 0 lvl
	FROM
		sys.sysobjects
	WHERE
		xtype='FN'
		AND id NOT IN (SELECT [object_id] FROM sys.sql_dependencies )

	UNION ALL
	
	SELECT
		a.[object_id],c.lvl+1
	FROM sys.sql_dependencies a
		JOIN c ON c.id = a.referenced_major_id
)
SELECT DISTINCT * INTO #t FROM c WHERE NOT EXISTS(SELECT * FROM c a WHERE a.id=c.id AND a.lvl < c.lvl)

DECLARE @id int, @s varchar(8000)

DECLARE cr CURSOR local FOR SELECT id FROM #t ORDER BY lvl
OPEN cr
FETCH NEXT FROM cr INTO @id
WHILE @@FETCH_STATUS = 0 BEGIN
	SELECT TOP 1 @s  = [text] FROM sys.syscomments WHERE id = @id
	--PRINT object_name(@id)
	PRINT @s
	PRINT 'GO'
	FETCH NEXT FROM cr INTO @id
END

DROP TABLE #t
17 июн 09, 19:20    [7312608]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания объектов БД  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
сколько у вас вью, функций, процедур?
17 июн 09, 19:22    [7312614]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания объектов БД  [new]
Mifich
Member

Откуда:
Сообщений: 205
Winnipuh
сколько у вас вью, функций, процедур?

200 таблиц
15 вьював
394 процедур
60 функций
18 июн 09, 10:07    [7313939]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт создания объектов БД  [new]
Mifich
Member

Откуда:
Сообщений: 205
Может кому пригодится...

Решил проблему с помощью утилиты SQL Manager 2008 for SQL Server
Она очень грамотно выстраивает очередность создания объектов БД и переносит данные, но к сожалению не идеально. Отдельные моменты все таки приходится подправлять...
22 июн 09, 16:56    [7329736]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить