Find the real column name of an alias used in a view?

前端 未结 4 634
野性不改
野性不改 2020-11-30 13:00

Suppose I have a view in which some of the column names are aliases, like \"surName\" in this example:

CREATE VIEW myView AS
    SELECT  
            firstNa         


        
4条回答
  •  感动是毒
    2020-11-30 13:05

    Given this view:

    CREATE VIEW viewTest
    AS
    SELECT
        books.id,
        books.author,
        Books.title AS Name
    FROM
        Books
    

    What I can see you can get the columns used and the tables used by doing this:

    SELECT * 
    FROM INFORMATION_SCHEMA.VIEW_COLUMN_USAGE AS UsedColumns 
    WHERE UsedColumns.VIEW_NAME='viewTest'
    
    SELECT * 
    FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE AS UsedTables 
    WHERE UsedTables.VIEW_NAME='viewTest'
    

    This is for sql server 2005+. See reference here

    Edit

    Give the same view. Try this query:

    SELECT
        c.name AS columnName,
        columnTypes.name as dataType,
        aliases.name as alias
    FROM 
    sys.views v 
    JOIN sys.sql_dependencies d 
        ON d.object_id = v.object_id
    JOIN .sys.objects t 
        ON t.object_id = d.referenced_major_id
    JOIN sys.columns c 
        ON c.object_id = d.referenced_major_id 
    JOIN sys.types AS columnTypes 
        ON c.user_type_id=columnTypes.user_type_id
        AND c.column_id = d.referenced_minor_id
    JOIN sys.columns AS aliases
        on c.column_id=aliases.column_id
        AND aliases.object_id = object_id('viewTest')
    WHERE
        v.name = 'viewTest';
    

    It returns this for me:

    columnName  dataType  alias
    
    id          int       id
    author      varchar   author
    title       varchar   Name
    

    This is also tested in sql 2005+

提交回复
热议问题