Supongamos que tengo una vista en la que algunos de los nombres de columna son los alias, como "Apellido" en este ejemplo:¿Encontrar el nombre de columna real de un alias utilizado en una vista?
CREATE VIEW myView AS
SELECT
firstName,
middleName,
you.lastName surName
FROM
myTable me
LEFT OUTER JOIN yourTable you
ON me.code = you.code
GO
soy capaz de recuperar algo de información acerca de la vista mediante las vistas INFORMATION_SCHEMA.
Por ejemplo, la consulta
SELECT column_name AS ALIAS, data_type AS TYPE
FROM information_schema.columns
WHERE table_name = 'myView'
rendimientos:
---------------- |ALIAS |TYPE | ---------------- |firstName |nchar| |middleName|nchar| |surName |nchar| ----------------
Sin embargo, me gustaría saber el nombre real de la columna también. Lo ideal sería:
--------------------------- |ALIAS |TYPE |REALNAME | --------------------------- |firstName |nchar|firstName | |middleName|nchar|middleName| |surName |nchar|lastName | ---------------------------
¿Cómo puedo determinar cuál es el nombre de la columna verdadera se basa en el alias? Debe haber alguna forma de utilizar las tablas sys y/o las vistas INFORMATION_SCHEMA para recuperar esta información.
EDIT: yo puede conseguir cercano con esta abominación, que es similar a la respuesta de 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'
Esto produce:
--------------------------- |ALIAS |TYPE |REALNAME | --------------------------- |firstName |nchar|firstName | |middleName|nchar|middleName| |surName |nchar|code | |surName |nchar|lastName | ---------------------------
pero el tercer registro es incorrecto - esto sucede con cualquier vista creada con una cláusula "JOIN", porque hay dos columnas con el mismo "column_id", pero en una tabla diferente s.
que yo sepa, la sintaxis regular para alias de columna está usando 'AS': seleccione columna como columnB desde t – abatishchev
El nombre real para una vista puede que ni siquiera sea una columna, por lo que no hay forma de hacerlo. ¿Cuál sería el nombre de la columna en esta vista? Crear vista a como seleccionar 1 b –
Siempre y cuando la opción ['VIEW_METADATA'] (http://msdn.microsoft.com/en-us/library/ms187956.aspx) no esté configurada al crear la vista SQL Server devolverá a las API DB-Library, ODBC y OLE DB. Metadatos de modo de exploración que incluyen información sobre la tabla base a la que pertenecen las columnas en el conjunto de resultados. Aunque nunca miré este aspecto yo mismo. –