SQL Server 中给视图加描述的唯一可靠方式是使用 sp_addextendedproperty,存储于 sys.extended_properties 系统表,且必须指定架构名;PostgreSQL 用 COMMENT ON VIEW(需带 schema);MySQL 仅支持 CREATE VIEW 时通过 COMMENT 属性定义。
SQL Server 里怎么给视图加描述,
是唯一靠谱方式
SQL Server 不支持
这种 PostgreSQL 风格的语法,想存描述只能靠扩展属性。系统表
是唯一被官方支持、且能被 SSMS 图形界面识别的注释存储位置。
常见错误是直接改
或试图用
—— 这俩都不存在,执行就报
或提示对象不可更新。
必须用
,且前三个参数固定为
、描述文本、
、架构名、
、视图名
如果视图在
下,不能省略
,否则注释会挂到数据库级
执行前最好先查一下是否已存在:
PostgreSQL 视图注释直接用
,但要注意对象路径写全
PostgreSQL 支持标准 SQL 的
语法,干净利落。但容易踩坑的是:如果视图不在
schema,必须显式写出 schema 名,否则注释会创建失败或挂错地方。
典型错误现象是执行完没报错,但在
里看不到描述——八成是 schema 没指定,系统默认去找
。
正确写法:
带 schema 的写法:
删注释用
,不是
(这语法不存在)
MySQL 8.0+ 给视图加描述只能靠
字段,但仅限 CREATE 时指定
MySQL 的视图本身不支持运行时添加注释,
语句没有
子句。唯一能留下说明的方式,是在
里用
属性——而且只接受字符串字面量,不能拼接变量或函数。
这意味着:上线后发现描述写错了?没法热修复,必须重建视图。重建还可能触发权限重置或依赖失效,线上慎用。
建视图时加上:
能看到这个 comment,但
表里没有单独字段存它,得从
里自己解析
别指望
—— 语法错误,MySQL 直接拒绝
跨数据库迁移时,注释几乎必然丢失,元数据导出要单独处理
不同数据库存注释的位置和机制完全不同:SQL Server 塞进系统存储过程,PostgreSQL 写进
,MySQL 只埋在
语句里。任何通用导出工具(比如
、
)默认都不包含这些描述信息。
如果你用 Flyway 或 Liquibase 管理变更,
类操作必须手动写成独立的
文件并加入 changelog——它不会从 DDL 自动提取。
SQL Server 迁出注释:需额外查询
并生成一批
脚本
PostgreSQL 迁出注释:用
仍不够,得配合
(不推荐,太底层)或用
导出带注释的 INSERT
MySQL 注释一旦建好就“固化”在
里,dump 出来有,但重建时若没加
,重复执行会报错
注释不是装饰,是生产环境排查逻辑的线索。但它不像主键那样强制校验,一不留神就断连——尤其是当 DBA 换人、文档没同步、又没人定期核对
和代码注释是否一致的时候。
sp_addextendedpropertyCOMMENT ON VIEWsys.extended_propertiessys.viewsALTER VIEW ... WITH (DESCRIPTION = 'xxx')Incorrect syntax nearsp_addextendedproperty'MS_Description''SCHEMA''VIEW'dbo@level0name = 'dbo'SELECT * FROM fn_listextendedproperty(NULL, 'SCHEMA', 'dbo', 'VIEW', 'my_view', NULL, NULL)COMMENT ON VIEWCOMMENTpublic\d+ my_viewpublic.my_viewCOMMENT ON VIEW sales.summary_report IS '按月汇总销售额与退货率';COMMENT ON VIEW analytics.active_users IS '最近30天登录用户去重计数';COMMENT ON VIEW xxx IS NULL;DROP COMMENTCOMMENTALTER VIEWCOMMENTCREATE VIEWCOMMENTCREATE VIEW user_summary COMMENT '含注册时间、最后登录、设备类型聚合' AS SELECT ...;SHOW CREATE VIEW user_summaryINFORMATION_SCHEMA.VIEWSVIEW_DEFINITIONALTER VIEW user_summary COMMENT 'new'pg_descriptionCREATEmysqldumppg_dump --schema-onlyCOMMENTSQLsys.extended_propertiessp_addextendedpropertypg_dump --schema-only --no-owner --no-privilegespg_dump -s -t pg_descriptionpg_dump --insertsCREATE VIEWIF NOT EXISTSsys.extended_properties