如何通过SQL查询获取SQL Server指定Schema下所有视图的DDL脚本
SQL Server 批量获取指定Schema下视图DDL的解决方案
核心实现原理
SQL Server 提供系统内置函数OBJECT_DEFINITION()和系统视图sys.views、sys.schemas,可以直接查询到视图的完整创建语句,效果等价于Oracle的ALL_VIEWS.QUERY字段。
基础查询:单Schema下所有视图DDL
执行以下SQL即可获取指定Schema下所有视图的完整DDL:
SELECT SCHEMA_NAME(v.schema_id) AS 所属Schema, v.name AS 视图名称, OBJECT_DEFINITION(v.object_id) AS 视图创建语句 FROM sys.views v INNER JOIN sys.schemas s ON v.schema_id = s.schema_id WHERE s.name = N'替换为你要查询的Schema名' ORDER BY v.name;
扩展查询:多Schema下所有视图DDL
如果需要同时导出多个Schema的视图,修改WHERE条件即可:
SELECT SCHEMA_NAME(v.schema_id) AS 所属Schema, v.name AS 视图名称, OBJECT_DEFINITION(v.object_id) AS 视图创建语句 FROM sys.views v INNER JOIN sys.schemas s ON v.schema_id = s.schema_id WHERE s.name IN (N'Schema1', N'Schema2', N'Schema3') -- 替换为实际Schema列表 ORDER BY s.name, v.name;
部署优化:生成可直接执行的完整脚本
如果需要直接用于目标库部署,可以自动拼接删除逻辑,避免重复创建报错:
SELECT N'IF OBJECT_ID(N''' + QUOTENAME(SCHEMA_NAME(v.schema_id)) + N'.' + QUOTENAME(v.name) + N''', N''V'') IS NOT NULL DROP VIEW ' + QUOTENAME(SCHEMA_NAME(v.schema_id)) + N'.' + QUOTENAME(v.name) + N'; GO ' + OBJECT_DEFINITION(v.object_id) + N' GO ' AS 完整部署脚本 FROM sys.views v INNER JOIN sys.schemas s ON v.schema_id = s.schema_id WHERE s.name IN (N'替换为你的Schema列表') ORDER BY s.name, v.name;
注意事项
- 返回结果被截断问题:SSMS默认文本输出的单字段最大长度为256字符,可通过「工具→选项→查询结果→SQL Server→结果到文本」将最大字符数调整为8192(SSMS支持的最大值),或将结果直接导出为文本文件,即可获取完整DDL。
- 该方案兼容SQL Server 2008及以上所有版本,也可扩展适配存储过程、自定义函数等对象的导出,只需将
sys.views替换为对应系统视图(如sys.procedures对应存储过程)即可。 - 生成的脚本无需额外修改即可直接在目标数据库执行,完全适配自动化部署流程。
内容的提问来源于stack exchange,提问作者Carlo Prato
相关产品推荐
相关产品推荐

