この例の「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'
収量:
-------------------------------- |エイリアス|タイプ| -------------------------------- | firstName | nchar | |ミドルネーム|nchar| | surName | nchar | --------------------------------
ただし、実際の列名も知りたいのですが。理想的には:
--------------------------- |エイリアス|タイプ|本名| --------------------------- | firstName | nchar | firstName | |ミドルネーム|nchar|ミドルネーム| | surName | nchar | lastName | ---------------------------
エイリアスに基づいて実際の列名を特定するにはどうすればよいですか? この情報を取得するには、sysテーブルやINFORMATION_SCHEMAビューを使用する方法が必要です。
編集: 私はこの忌まわしきに近づくことができます、それはアリオンの答えに似ています:
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'
これにより、次のようになります。
--------------------------- |エイリアス|タイプ|本名| --------------------------- | firstName | nchar | firstName | |ミドルネーム|nchar|ミドルネーム| | surName |nchar|コード| | surName | nchar | lastName | ---------------------------
ただし、3番目のレコードは間違っています。これは、「JOIN」句を使用して作成されたビューで発生します。これは、「column_id」が同じでテーブルが異なる2つの列があるためです。