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

Откуда: Москва
Сообщений: 397
Народ, помогите!
Я добавил описания полей всех таблиц в SQL. На основании этих таблиц у меня построены представления. Как мне теперь сделать так, чтобы все эти описания были и в представлениях? Или как построить селект к системным представлениям так, чтобы получить список полей из представлений с описаниями?
23 апр 14, 11:14    [15920966]     Ответить | Цитировать Сообщить модератору
 Re: Описание полей в представлениях  [new]
Glory
Member

Откуда:
Сообщений: 104751
fn_listextendedproperty()
23 апр 14, 11:17    [15920986]     Ответить | Цитировать Сообщить модератору
 Re: Описание полей в представлениях  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Glory
fn_listextendedproperty()
А как ион узнает к какому полю базовой таблицы
относится поле представления? Тем более, что поле представления может быть выражением.

Надо добавить ручками расширенные свойства полям самого представления. ИМХО
23 апр 14, 11:26    [15921059]     Ответить | Цитировать Сообщить модератору
 Re: Описание полей в представлениях  [new]
Glory
Member

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

Хм. Напишет имя таблицы в вызове функции ??
23 апр 14, 11:27    [15921072]     Ответить | Цитировать Сообщить модератору
 Re: Описание полей в представлениях  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Glory
iap
А как ион узнает к какому полю базовой таблицы
относится поле представления?

Хм. Напишет имя таблицы в вызове функции ??
А перед этим определит, из какой таблицы каждое поле? Вручную?
А если поле не из таблицы?
23 апр 14, 11:32    [15921121]     Ответить | Цитировать Сообщить модератору
 Re: Описание полей в представлениях  [new]
Ennor Tiegael
Member

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

Добавить к этому
sys.sql_expression_dependencies
- и если имена полей совпадают, то в самый раз.

Конечно, если 1 поле вьюхи выводится из десятка полей таблицы, то не очень понятно, что делать. Но если мэппинг 1:1, то самое то.
23 апр 14, 11:33    [15921129]     Ответить | Цитировать Сообщить модератору
 Re: Описание полей в представлениях  [new]
Glory
Member

Откуда:
Сообщений: 104751
iap
А перед этим определит, из какой таблицы каждое поле? Вручную?

Это его проблемы, как он определит
Запрос то в представлении он как-то написал

iap
А если поле не из таблицы?

fn_listextendedproperty() вернет NULL
23 апр 14, 11:34    [15921144]     Ответить | Цитировать Сообщить модератору
 Re: Описание полей в представлениях  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
Ребят, сложно мне так разобраться:( напишите хотя бы один пример запроса, а я уже додумаю!
23 апр 14, 17:15    [15924198]     Ответить | Цитировать Сообщить модератору
 Re: Описание полей в представлениях  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
Вопрос снимается! Позже напишу запрос кому интересно!
23 апр 14, 17:36    [15924398]     Ответить | Цитировать Сообщить модератору
 Re: Описание полей в представлениях  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
Итак, выкладываю свой запрос вьюшки:
SELECT     sys.views.name AS view_name, sys.views.object_id AS view_id, sys.sql_expression_dependencies.referenced_entity_name AS table_name, 
                      sys.sql_expression_dependencies.referenced_id AS table_id, sys.columns.name AS column_name, sys.extended_properties.value AS column_description, 
                      sys.types.name AS column_type, sys.columns.max_length AS column_size
FROM         sys.extended_properties RIGHT OUTER JOIN
                      sys.types INNER JOIN
                      sys.columns ON sys.types.system_type_id = sys.columns.system_type_id RIGHT OUTER JOIN
                      sys.tables ON sys.columns.object_id = sys.tables.object_id ON sys.extended_properties.major_id = sys.columns.object_id AND 
                      sys.extended_properties.minor_id = sys.columns.column_id RIGHT OUTER JOIN
                      sys.views LEFT OUTER JOIN
                      sys.sql_expression_dependencies ON sys.views.object_id = sys.sql_expression_dependencies.referencing_id ON 
                      sys.tables.object_id = sys.sql_expression_dependencies.referenced_id

Если кому не надо показывать колонки из справочников, которые подсоединены к таблицам, фильтруем их при запросе к вышеуказанной вьюшке!
23 апр 14, 21:27    [15925542]     Ответить | Цитировать Сообщить модератору
 Re: Описание полей в представлениях  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Блин, запрос написан левой пяткой, нарушен целый ряд правил написания.
Забудьте про RIGHT JOIN запетали себя и поэтому запрос работает неправильно.
Связки некоторые неверные.
Алиасы, алиасы, алиасы!
	SELECT	V.object_id			AS view_id
	,	V.name				AS view_name
	,	D.referenced_id			AS table_id
	,	D.referenced_entity_name	AS table_name
	,	C.column_id
	,	C.name				AS column_name
	,	P.name				AS column_property_name
	,	P.value				AS column_property_value
	,	S.name				AS column_type
	,	C.max_length			AS column_size
	FROM	sys.views			V
OUTER APPLY (SELECT
		CASE	WHEN Exists(
			SELECT	*
			FROM	sys.sql_expression_dependencies	E
			WHERE	E.referencing_id = V.object_id
			AND	E.referenced_minor_id != 0)
			THEN 1 ELSE 0 END)	E (ByColumn)
LEFT	JOIN	sys.sql_expression_dependencies	D ON D.referencing_id	= V.object_id
LEFT	JOIN	sys.columns			C ON C.object_id	= D.referenced_id
						 AND(C.column_id	= D.referenced_minor_id
						  OR D.referenced_minor_id = 0 AND E.ByColumn = 0)
LEFT	JOIN	sys.types			S ON S.user_type_id	= C.user_type_id
LEFT	JOIN	sys.extended_properties		P ON P.major_id		= D.referenced_id
						 AND P.minor_id		= C.column_id
						 AND P.class		= 1
	ORDER BY V.object_id
		,D.referenced_id
		,C.column_id
Но главное другое - он не ставит соответствие названию колонок из view колонкам из таблиц. Т.е. просто месиво.
И показывает даже в случае SCHEMABINDING колонки участвующие в JOIN, но отсутсвующие в SELECT.
Но не парьтесь, пока нельзя так просто сопоставить это. Только имея свой парсер. За 2012 и 2014 не ручаюсь, но скорее там такая же проблема.
Т.е. без своего парсера не обойтись.
24 апр 14, 01:31    [15926345]     Ответить | Цитировать Сообщить модератору
 Re: Описание полей в представлениях  [new]
eric555
Member

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

Ну да, написано на коленке, на скорую руку:)
Спасибо за селект!! Пришлось сохранить вьюху без сортировки, так как ругался sql что типа предложение order by не допускается в представлениях и т.д.... если не указано top или for XML. Но это не беда! При запросе к вьюхе тогда отсортирую.
В общем, потестирую, попробую, если что - отпишу!
Еще раз большое спасибо!
24 апр 14, 09:40    [15926888]     Ответить | Цитировать Сообщить модератору
 Re: Описание полей в представлениях  [new]
eric555
Member

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

А как бы мне в ваш запрос добавить id-шник поля из вьюхи? Уж очень его не хватает для сортировки всех полей вьюхи!
На счет соответствия полей из вьюшки и таблиц: нельзя ли добавить просто отдельной колонкой псевдоним из вьюшки?
24 апр 14, 18:25    [15931393]     Ответить | Цитировать Сообщить модератору
 Re: Описание полей в представлениях  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
eric555,

15926345, после скрипта есть объяснение.
Спрашивайте если что-то конкретно непонятно.
24 апр 14, 22:15    [15932317]     Ответить | Цитировать Сообщить модератору
 Re: Описание полей в представлениях  [new]
eric555
Member

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

Я видел, просто, видимо, не так понял. Короче, не выйдет, наверное, как я представлял. Ну да и ладно, вроде и так уже победили:)
Спасибо:)
24 апр 14, 22:34    [15932378]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить