Предположим, что у меня есть представление, в котором некоторые имена столбцов являются псевдонимами, такими как "surName" в этом примере:
CREATE VIEW myView AS
SELECT
firstName,
middleName,
you.lastName surName
FROM
myTable me
LEFT OUTER JOIN yourTable you
ON me.code = you.code
GO
Я могу получить некоторую информацию о представлении, используя представления INFORMATION_SCHEMA.
Например, запрос
SELECT column_name AS ALIAS, data_type AS TYPE
FROM information_schema.columns
WHERE table_name = 'myView'
дает:
---------------- |ALIAS |TYPE | ---------------- |firstName |nchar| |middleName|nchar| |surName |nchar| ----------------
Однако мне также хотелось бы знать имя столбца. В идеале:
--------------------------- |ALIAS |TYPE |REALNAME | --------------------------- |firstName |nchar|firstName | |middleName|nchar|middleName| |surName |nchar|lastName | ---------------------------
Как определить, какое имя реального столбца основано на псевдониме?. Чтобы получить эту информацию, должен быть какой-то способ использовать таблицы sys и/или INFORMATION_SCHEMA.
EDIT: Я могу приблизиться к этой мерзости, которая похожа на ответ Ариона:
SELECT
c.name AS ALIAS,
ISNULL(type_name(c.system_type_id), t.name) AS DATA_TYPE,
tablecols.name AS REALNAME
FROM
sys.views v
JOIN sys.columns c ON c.object_id = v.object_id
LEFT JOIN sys.types t ON c.user_type_id = t.user_type_id
JOIN sys.sql_dependencies d ON d.object_id = v.object_id
AND c.column_id = d.referenced_minor_id
JOIN sys.columns tablecols ON d.referenced_major_id = tablecols.object_id
AND tablecols.column_id = d.referenced_minor_id
AND tablecols.column_id = c.column_id
WHERE v.name ='myView'
Это дает:
--------------------------- |ALIAS |TYPE |REALNAME | --------------------------- |firstName |nchar|firstName | |middleName|nchar|middleName| |surName |nchar|code | |surName |nchar|lastName | ---------------------------
но третья запись ошибочна - это происходит с любым представлением, созданным с помощью предложения JOIN, потому что есть два столбца с одинаковым "column_id", но в разных таблицах.