снова SQLDMO...

max_s
Дата: 04.10.2004 12:12:04
Hi, All.

В базе описаны Defaults (например MyDef, который по умолчанию ставить значение 555), они же прописаны некоторым Columns некоторых Tables. Вопрос: как, с помощью методов DMO, получить имя дефолта для колонки, то есть получить скрипт в виде

EXEC sp_bindefault N'[dbo].[MyDef]', N'[TableName].[ColumnName]'
или хотя бы TableName.ColumnName.DefaultName

Я перепробовал множество методов, но всегда получаю скрипт, который содержит конкретно 555, а не MyDef, приблизительно такой:

ALTER TABLE [z_TableName] ADD 
	CONSTRAINT [DF__z_TableName__CopyID__4E6B1248] DEFAULT (0) FOR [ColumnName]
GO

успехов,
Макс
ziktuw
Дата: 04.10.2004 17:43:28
Вы не путаете разные вещи? В MSSQL есть 2 вида default. 1-ый - это объект DEFAULT и он создается конструкцией CREATE DEFAULT, а присоединяется/отсоединяется к колонкам через sp_bindefault/sp_unbindefault. 2-ой - это элемент целостности (constraint) DEFAULT. Он создается через CREATE/ALTER TABLE и является принадлежностью только конкретной таблицы, он к sp_bindefault/sp_unbindefault не имеет никакого отношения.

Соответственно, DMO имеет коллекцию Defaults у объекта Database и проперть DRIDefault у объекта Column.

_________
Свет в конце тоннеля временно потушен по техническим причинам.
max_s
Дата: 04.10.2004 19:15:19
Возможно. Опишу подробнее задачу:
необходимо скриптовать обекты БД, в частности таблицы, с помощью DMO все выходит прекрасно, но есть в базе DEFAULT (который прописывается колонкам sp_bindefault/sp_unbindefault) и получить строку с запуском sp_bindefault как это скриптует EM не получается. А надо... помогите...

успехов,
Макс
max_s
Дата: 06.10.2004 10:56:13
Для тех, кто будет этим пользоваться...
И для тех, кто мне помочь не смог...

DataBase.Tables.Item(i, EmptyParam).Script(SQLDMOScript_Bindings,
        EmptyParam, EmptyParam, SQLDMOScript2_Default);

успехов,
Макс
aag
Дата: 06.10.2004 11:07:57
А не проще ли это сделать средствами самого MSSQL, через хранимую пр-ру?

Nobody faults but mine... (LZ)
max_s
Дата: 06.10.2004 11:14:12
2 aag

Да сначала так и делал, но разбираться там посложнее: где чего храниться, какие хп-шки запускать, заливать их во временные таблицы, потом их обрабатывать и т.д. и т.п.
А с SQLDMO получилось намного легче. Вобщем задача приблизительно такая: клонирование базы данных (начиная от логинов SQLServer-а и заканчивая правами доступа на объекты БД).

Кроме того SQLDMO позволяет выполнить ЛЮБОЙ скрипт с ЛЮБЫМ количеством GO. Для меня это плюс - не надо делать "вылавливание" этих GO.

успехов,
Макс