Пусть у меня есть представление, в котором некоторые из имен столбцов являются псевдонимами, как «ФАМИЛИЯ» в этом примере:Найти настоящее имя столбца псевдонима, используемого в представлении?
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: я могу сблизиться с этой мерзостью, которая похожа на ответ Arion в:
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», но в другой таблице s.
AFAIK, регулярный синтаксис для псевдонима столбца используется 'как': выбери Columna, как columnB от t – abatishchev
Настоящее имя для представления может быть даже не столбцом, так что нет никакого способа сделать это. Каким будет название столбца в этом представлении? Создать представление a как select 1 b –
Пока параметр ['VIEW_METADATA' (http://msdn.microsoft.com/en-us/library/ms187956.aspx) не задан при создании представления, SQL Server вернется в DB-библиотеку, ODBC и OLE DB API-интерфейсы метаданных режима просмотра, включая информацию о базовой таблице, к которой относятся столбцы в наборе результатов. Никогда не смотрел на этот аспект сам. –