【问题标题】:Retrieve column descriptions from SQL Server-linked table in MS Access从 MS Access 中的 SQL Server 链接表中检索列描述
【发布时间】:2011-02-01 16:46:05
【问题描述】:

我正在从 MS Access 前端链接到 SQL Server 中的表。当我在 Access 中创建链接表时,我想提出 SQL Server 中某些表的列描述。有没有办法以编程方式获取列描述?

(我知道如何将描述附加到链接表中,我只需要帮助获取后端的描述。)

【问题讨论】:

    标签: sql-server ms-access linked-tables


    【解决方案1】:

    尝试类似:

    DECLARE @TableName varchar(100)
    SELECT @TableName = 'yourtablename'
    
    
    -- This will determine if we're using version 9 (2005) of SQL Server, and execute code accordingly
    
    IF CAST(REPLACE(SUBSTRING(CAST(SERVERPROPERTY('productversion') as varchar),1,2), '.','') as int) >= 9
    BEGIN
          -- This is a SQL 2005 machine
          SELECT  
                [Table Name] = OBJECT_NAME(c.object_id), 
                [Column Name] = c.name, 
                [Description] = ex.value  
          FROM  
                sys.columns c  
          LEFT OUTER JOIN  
                sys.extended_properties ex  
          ON  
                ex.major_id = c.object_id 
                AND ex.minor_id = c.column_id  
                AND ex.name = 'MS_Description'  
          WHERE  
                OBJECTPROPERTY(c.object_id, 'IsMsShipped')=0  
                AND OBJECT_NAME(c.object_id) = @TableName
          ORDER  
                BY OBJECT_NAME(c.object_id), c.column_id
    END
    ELSE
    BEGIN
          -- assume this is a SQL 2000
          SELECT 
                [Table Name] = i_s.TABLE_NAME, 
                [Column Name] = i_s.COLUMN_NAME, 
                [Description] = s.value 
          FROM 
                INFORMATION_SCHEMA.COLUMNS i_s 
          LEFT OUTER JOIN 
                sysproperties s 
          ON 
                s.id = OBJECT_ID(i_s.TABLE_SCHEMA+'.'+i_s.TABLE_NAME) 
                AND s.smallid = i_s.ORDINAL_POSITION 
                AND s.name = 'MS_Description' 
          WHERE 
                OBJECTPROPERTY(OBJECT_ID(i_s.TABLE_SCHEMA+'.'+i_s.TABLE_NAME), 'IsMsShipped')=0 
                AND i_s.TABLE_NAME = @TableName
          ORDER BY
                i_s.TABLE_NAME, i_s.ORDINAL_POSITION 
    END
    

    【讨论】:

    • 非常好。我特别喜欢自动在 2005+ 与早期版本的正确属性表之间切换的条件。
    • 一个快速的错误修复。 SQL Server 2008 (productversion == 10...) 上的版本检查失败。由于您只是抓取第一个字符,因此它返回的版本号为 1。T-SQL 不是我的强项,但以下更新的行在 SQL Server 2000 和 SQL Server 2008 中都适用:IF CAST(REPLACE(SUBSTRING(CAST(SERVERPROPERTY('productversion') as varchar),1,2), '.','') as int) >= 9 可能有更好的方法不过比我的。
    • -1 - 来自robkennedy.com/2007/09/20/… 的精确复制和粘贴,不注明出处。
    • 对不起...我通常会尽量确保我这样做...谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多