Публикация
Как узнать русские имена таблиц и колонок в SQL запросе?
9 ноября 2013 21:28
В некоторых случаях, например, если Вы строите модель PowerPivot по БД BPMonline, полезно получить имена объектов на русском языке.
Поскольку большинство таблиц созданы Террасофт-ом через дизайнер Entity Framework, у таблиц есть расширенные свойства, в которых хранятся русские имена. Вот несколько запросов:
-- Имена таблиц с перечислением колонок на русском из расширенных свойств таблицы (EntitySchema)
SELECT t.name, capt.value,
STUFF((
SELECT ',' + [ColumnName] + '=' + SUBSTRING(xx.left_cutted_ColumnCaption, 0, CHARINDEX(',',xx.left_cutted_ColumnCaption))
FROM (
SELECT x.major_id, x.minor_id, [ColumnName],
SUBSTRING(x.[ColumnCaption], CHARINDEX('ru-RU|',x.[ColumnCaption]) + 6, LEN(x.[ColumnCaption])) AS left_cutted_ColumnCaption
FROM (
SELECT DISTINCT p.major_id, p.minor_id,
CONVERT(VARCHAR(255), FIRST_VALUE([ColumnName]) OVER (PARTITION BY p.major_id, p.minor_id ORDER BY p.major_id, p.minor_id)) AS [ColumnName],
CONVERT(VARCHAR(255), FIRST_VALUE([ColumnCaption]) OVER (PARTITION BY p.major_id, p.minor_id ORDER BY p.major_id, p.minor_id)) AS [ColumnCaption]
FROM (
SELECT pv.major_id, pv.minor_id, pv.[TS.ColumnName] AS [ColumnName], pv.[TS.EntitySchemaColumn.Caption] AS [ColumnCaption]
FROM (
SELECT p.major_id, p.minor_id, p.name, p.value
FROM sys.extended_properties p
WHERE p.name IN ( 'TS.EntitySchemaColumn.Caption' , 'TS.ColumnName' )
) x
PIVOT (
MIN(value) FOR name IN ( [TS.EntitySchemaColumn.Caption] , [TS.ColumnName] )
) AS pv
) p
) x
) xx
WHERE xx.major_id = t.[object_id]
ORDER BY xx.minor_id
FOR XML PATH ('')
), 1, 1, '') AS [ColumnCaptions]
FROM sys.TABLES t
LEFT JOIN (
SELECT xx.major_id,
SUBSTRING(xx.left_cutted_value, 0, CHARINDEX(',',xx.left_cutted_value)) AS value
FROM (
SELECT x.major_id,
SUBSTRING(x.value, CHARINDEX('ru-RU|',x.value) + 6, LEN(x.value)) AS left_cutted_value
FROM (
SELECT DISTINCT p.major_id,
CONVERT(VARCHAR(255), FIRST_VALUE(p.value) OVER (PARTITION BY p.major_id ORDER BY p.major_id)) AS value
FROM sys.extended_properties p
WHERE p.name = 'TS.EntitySchema.Caption'
) x
) xx
) capt ON t.[object_id] = capt.major_id
ORDER BY t.name
SELECT t.name, capt.value,
STUFF((
SELECT ',' + [ColumnName] + '=' + SUBSTRING(xx.left_cutted_ColumnCaption, 0, CHARINDEX(',',xx.left_cutted_ColumnCaption))
FROM (
SELECT x.major_id, x.minor_id, [ColumnName],
SUBSTRING(x.[ColumnCaption], CHARINDEX('ru-RU|',x.[ColumnCaption]) + 6, LEN(x.[ColumnCaption])) AS left_cutted_ColumnCaption
FROM (
SELECT DISTINCT p.major_id, p.minor_id,
CONVERT(VARCHAR(255), FIRST_VALUE([ColumnName]) OVER (PARTITION BY p.major_id, p.minor_id ORDER BY p.major_id, p.minor_id)) AS [ColumnName],
CONVERT(VARCHAR(255), FIRST_VALUE([ColumnCaption]) OVER (PARTITION BY p.major_id, p.minor_id ORDER BY p.major_id, p.minor_id)) AS [ColumnCaption]
FROM (
SELECT pv.major_id, pv.minor_id, pv.[TS.ColumnName] AS [ColumnName], pv.[TS.EntitySchemaColumn.Caption] AS [ColumnCaption]
FROM (
SELECT p.major_id, p.minor_id, p.name, p.value
FROM sys.extended_properties p
WHERE p.name IN ( 'TS.EntitySchemaColumn.Caption' , 'TS.ColumnName' )
) x
PIVOT (
MIN(value) FOR name IN ( [TS.EntitySchemaColumn.Caption] , [TS.ColumnName] )
) AS pv
) p
) x
) xx
WHERE xx.major_id = t.[object_id]
ORDER BY xx.minor_id
FOR XML PATH ('')
), 1, 1, '') AS [ColumnCaptions]
FROM sys.TABLES t
LEFT JOIN (
SELECT xx.major_id,
SUBSTRING(xx.left_cutted_value, 0, CHARINDEX(',',xx.left_cutted_value)) AS value
FROM (
SELECT x.major_id,
SUBSTRING(x.value, CHARINDEX('ru-RU|',x.value) + 6, LEN(x.value)) AS left_cutted_value
FROM (
SELECT DISTINCT p.major_id,
CONVERT(VARCHAR(255), FIRST_VALUE(p.value) OVER (PARTITION BY p.major_id ORDER BY p.major_id)) AS value
FROM sys.extended_properties p
WHERE p.name = 'TS.EntitySchema.Caption'
) x
) xx
) capt ON t.[object_id] = capt.major_id
ORDER BY t.name
9 ноября 2013 21:30
Ёлки, как эту фигню поправить..!? Качайте прикреплённый файл лучше.
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать