微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何列出视图的源表名称和列以及扩展属性描述

如何解决如何列出视图的源表名称和列以及扩展属性描述

我试着找

最后我用这种方式

0- 由于视图中的字段别名,我试图查找列的真实名称。所以我用了这个功能

          Create FUNCTION [dbo].[_D_RealColumnName]
       (@ViewName NVarChar(50),@ColumnName NVarChar(50))RETURNS NVarChar(50)
       AS BEGIN
       DECLARE @R NVarchar(50)
        Set @R=(SELECT name 
                 FROM sys.dm_exec_describe_first_result_set 
                (N'SELECT *   from  '+@ViewName,null,1) 
                Where source_column=@ColumnName)
        RETURN IsNUll(@R,@ColumnName )
       END

1- 创建一个视图来收集名为“[_I_AllFields]”的信息

        CREATE View [dbo].[_I_AllFields] as 
    SELECT        *
    FROM            (SELECT        T .TABLE_NAME AS TName,C.COLUMN_NAME AS FName,C.ORDINAL_POSITION AS FSeq,D .value AS FDesc,C.DATA_TYPE AS FType,C.CHaraCTER_MAXIMUM_LENGTH AS FLen,F.collation_name AS Coll,F.is_identity AS IsIdentity,F.is_nullable AS IsNullAble,CONVERT(NVarChar(50),'') VName
                      FROM            informatION_SCHEMA.TABLES AS T INNER JOIN
                                                informatION_SCHEMA.COLUMNS AS C ON C.TABLE_NAME = T .TABLE_NAME INNER JOIN
                                                sys.columns AS F ON F.object_id = OBJECT_ID(T .TABLE_SCHEMA + '.' + T .TABLE_NAME) AND F.name = C.COLUMN_NAME LEFT OUTER JOIN
                                                sys.extended_properties AS D ON D .major_id = F.object_id AND D .minor_id = F.column_id AND D .Name = 'MS_Description') TList
    UNION
    SELECT        VCU.TABLE_NAME TName,[dbo].[_D_RealColumnName](VCU.VIEW_NAME,VCU.COLUMN_NAME) FName,TAF.FSeq,TAF.FDesc,TAF.FType,TAF.FLen,TAF.Coll,IsIdentity,IsNullAble,VCU.VIEW_NAME VName
    FROM            informatION_SCHEMA.VIEW_COLUMN_USAGE AS VCU INNER JOIN
                         (SELECT        T .TABLE_NAME AS TName,F.is_nullable AS IsNullAble
                           FROM            informatION_SCHEMA.TABLES AS T INNER JOIN
                                                     informatION_SCHEMA.COLUMNS AS C ON C.TABLE_NAME = T .TABLE_NAME INNER JOIN
                                                     sys.columns AS F ON F.object_id = OBJECT_ID(T .TABLE_SCHEMA + '.' + T .TABLE_NAME) AND F.name = C.COLUMN_NAME LEFT OUTER JOIN
                                                     sys.extended_properties AS D ON D .major_id = F.object_id AND D .minor_id = F.column_id AND D .Name = 'MS_Description') TAF ON VCU.TABLE_NAME = TAF.TName AND VCU.COLUMN_NAME = TAF.FName

2- 创建一个函数获取名为“_D_Field”的信息

CREATE 
FUNCTION [dbo].[_D_Field](
@InTName VarChar(100)

) RETURNS @Ans Table (
         TName VarChar(70),FName VarChar(70),FSeq int,FDesc NVarChar(70),FType NVarChar(10),FLen  int
            )
AS BEGIN   
      If Not Object_ID(@InTName,'U') Is Null
                        Insert into @Ans 
                        SELECT Convert(VarChar(70),TName)TName,Convert(VarChar(70),FName)FName,Convert(Int,FSeq)FSeq,Case When IsNull(FDesc,'')='' Then Convert(VarChar(70),FName) 
                        Else Case When Substring(Convert(VarChar(70),FDesc),1,1)='*' Then Case When Substring(Convert(VarChar(70),2,1)='' Then Convert(VarChar(70),FName) 
                                                                                                                                                            Else Substring(Convert(VarChar(70),70)End
                        Else Convert(VarChar(70),FDesc) End End FDesc,FType,IsNull(FLen,0)FLen
                        FROM _I_AllFields
                        where TName=@InTName
     Else
                        Insert into @Ans 
                        SELECT Convert(VarChar(70),0)FLen
                        FROM _I_AllFields
                        where VName=@InTName
            
RETURN 
END
     

3- 最后我使用了这个命令

Select * From dbo._D_Field('my_View_Name')

Select * From dbo._D_Field('my_Table_Name')

是正确的还是我能找到简单的方法

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?