Публикация

Как узнать русские имена таблиц и колонок в SQL запросе?

В некоторых случаях, например, если Вы строите модель 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

Нравится

Поделиться

2 комментария

Ёлки, как эту фигню поправить..!? Качайте прикреплённый файл лучше.

Спасибо, полезная информация!

Показать все комментарии