sql - 如何获取 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
不幸的是,这导致了同样的问题:
解决方案
尝试像这样更改查询:
$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)
推荐阅读
- r - ifelse 定义正确条件的函数问题
- java - 为什么我的二进制搜索无法正常工作
- spss - 计算几个调查问题
- xaml - 如何在 UWP 中的 ControlTemplate 中使用 x:bind
- java - 使用 SPF4J Java Profiler 监控 REST API 端点的性能
- blazor-server-side - 显示本地图像文件:///tmp/someimage.jpg
- arrays - Ruby 路径数组,如果包含在另一个项目中,则排序和删除
- javascript - 当我拖过一个项目时,拖放“dragover”事件以捕捉可拖动的父项而不是子项?里面的简单例子
- python - SQLAlchemy多对多查询排序并限制另一个表
- pytorch - 微调(德语)伯特。是否欠拟合?