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

Откуда: ☭
Сообщений: 72911
MSSQL 2005 9.00.3042.00
Хочу получить список типа таблица - поле - значение по умолчанию. Связку поле - значение по умолчанию получаю запросом
select col.name, dep.*
from sys.columns col
inner join sys.all_objects dep on dep.parent_object_id=col.object_id
where dep.type='D'
Однако в sys.all_objects отсутствуют поля, а в sys.columns отсутствует parent_object_id для связи с таблицей. И вообще пока не нашел представление со связью object_id - parent_object_id для поля. Где взять эту связь?
13 июл 09, 17:58    [7410318]     Ответить | Цитировать Сообщить модератору
 Re: Как получить родителькие таблицы?  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
Antonariy,

SELECT [TABLE_NAME], [COLUMN_NAME], [COLUMN_DEFAULT] FROM [INFORMATION_SCHEMA].[COLUMNS]
13 июл 09, 18:16    [7410415]     Ответить | Цитировать Сообщить модератору
 Re: Как получить родителькие таблицы?  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
Antonariy
И вообще пока не нашел представление со связью object_id - parent_object_id для поля. Где взять эту связь?
Берете из БОЛ, а именно смотрите раздел "Системные представления".

Вот так красивше будет :)
SELECT
	[TABLE_NAME],
	[COLUMN_NAME],
	CASE 
		WHEN [NUMERIC_PRECISION] IS NOT NULL THEN
			SUBSTRING([COLUMN_DEFAULT], 3, LEN([COLUMN_DEFAULT]) - 4)
		ELSE SUBSTRING([COLUMN_DEFAULT], 2, LEN([COLUMN_DEFAULT]) - 2)
	END AS COLUMN_DEFAULT
FROM [INFORMATION_SCHEMA].[COLUMNS]
WHERE [COLUMN_DEFAULT] IS NOT NULL

SELECT
	o.[name],
	c.[name],
	CASE 
		WHEN dc.[definition] IS NOT NULL THEN
			SUBSTRING(dc.[definition], 3, LEN(dc.[definition]) - 4)
		ELSE SUBSTRING(dc.[definition], 2, LEN(dc.[definition]) - 2)
	END AS COLUMN_DEFAULT
FROM sys.columns c
	JOIN sys.objects o ON c.[object_id] = o.[object_id]
	JOIN sys.default_constraints dc ON dc.parent_object_id = o.[object_id] AND c.[column_id] = dc.[parent_column_id]

ЗЫ. Если потянуло такие запросы делать - пора домой
13 июл 09, 18:31    [7410479]     Ответить | Цитировать Сообщить модератору
 Re: Как получить родителькие таблицы?  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72911
Во, второй вариант как раз нужен был
SELECT	o.[name],
	c.[name],
	dc.name
FROM sys.columns c
	JOIN sys.objects o ON c.[object_id] = o.[object_id]
	JOIN sys.default_constraints dc ON dc.parent_object_id = o.[object_id] AND c.[column_id] = dc.[parent_column_id]
Спасибо.)
14 июл 09, 10:32    [7411955]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить