首页 > 解决方案 > 如何获取 SQL Server 中表的列描述/注释

问题描述

在我的 laravel 应用程序中,我想获取给定 SQL Server 表的所有列的注释。

这是我迄今为止尝试过的:

$query    = "SELECT sys.objects.name AS TableName, sys.columns.name AS ColumnName,
                   ep.name AS PropertyName, ep.value AS Description
            FROM sys.objects
            INNER JOIN sys.columns ON sys.objects.object_id = sys.columns.object_id
            CROSS APPLY fn_listextendedproperty(default,
                              'SCHEMA', schema_name(schema_id),
                              'TABLE', sys.objects.name, 'COLUMN', sys.columns.name) ep
            ORDER BY sys.objects.name, sys.columns.column_id";

$columnDetails =  DB::connection($user->getConnectionName())->select(DB::raw($query)

这是我的表格在 DBeaver 中的样子:

在此处输入图像描述

但是,我从我的代码中得到了这个结果,它给出了“描述” null

在此处输入图像描述

我在查询或表设置中做错了什么导致它为空?


附加信息

我通过 DBeaver UI 添加了原始评论,认为这可能不会像我认为的那样做,我返回并通过 SQL 添加了另一列和评论:

EXEC laravel.sys.sp_addextendedproperty 'MS_Description', 'Some test description', 'schema', 'guest', 'table', 'users', 'column', 'test' GO

不幸的是,这导致了同样的问题:

在此处输入图像描述

标签: sqlsql-serverlaravel

解决方案


尝试像这样更改查询:

$query    = "select so.name as TableName, sc.name as ColumnName,
                ep.name as PropertyName, ep.value as Description
            from sys.objects so
            join sys.columns sc on so.object_id = sc.object_id
            join sys.extended_properties ep
                on sc.object_id = ep.major_id and sc.column_id = ep.minor_id
            order by so.name, sc.column_id";

$columnDetails =  DB::connection($user->getConnectionName())->select(DB::raw($query)

推荐阅读