【问题标题】:How to find the derived column types of a view in SQL Server 2005?如何在 SQL Server 2005 中查找视图的派生列类型?
【发布时间】:2011-08-31 08:24:14
【问题描述】:

例如,假设我有一个视图:

CREATE VIEW [dbo].[PaymentSchedule_vw]
AS
    SELECT
         [Order].Id                [Order Id]
        ,[PaymentSchedule].Date    [Payment Date]
    FROM
        _Order123 [Order]
        INNER JOIN
            _Order123_Shedule [PaymentSchedule]
            ON
            [Order].Id = [PaymentSchedule].OrderId

GO

如何发现[Order Id][Payment Date] 的类型?

【问题讨论】:

    标签: sql-server-2005 tsql


    【解决方案1】:
    SELECT top 1
           SQL_VARIANT_PROPERTY([Order Id], 'BaseType') OrderIdBaseType,
           SQL_VARIANT_PROPERTY([Payment Date], 'BaseType') PaymentDateBaseType
    FROM [PaymentSchedule_vw] 
    

    您应该检查以下属性:

    SQL_VARIANT_PROPERTY(<column>, 'BaseType'), 
    SQL_VARIANT_PROPERTY(<column>, 'Precision'), 
    SQL_VARIANT_PROPERTY(<column>, 'Scale'), 
    SQL_VARIANT_PROPERTY(<column>, 'MaxLength') 
    

    使用 SQL_VARIANT_PROPERTY 的优点是它也可以用于计算列和表达式

    【讨论】:

    • 值得注意的是,SQL_VARIANT_PROPERTY 来自 SQL Server 2008 及更高版本。
    • @SubqueryCrunch 我同意你的看法,因为这个问题被标记为 sql-server-2005 - 我发布它时没有意识到这一点。但是,由于我在 2018 年写此评论,而 2005 年不再受支持 - 我希望这一事实的影响很小
    【解决方案2】:
    SELECT c.name,
           t.name,
           c.max_length,
           c.precision,
           c.scale
    FROM   sys.columns c
           JOIN sys.types t
             ON t.user_type_id = c.user_type_id
                AND t.system_type_id = c.system_type_id
    WHERE  object_id = OBJECT_ID('PaymentSchedule_vw')  
    

    或者你可以使用SQL_VARIANT_PROPERTY - some examples here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      相关资源
      最近更新 更多