【问题标题】:SSMS - get DDL of all views in a schemaSSMS - 获取模式中所有视图的 DDL
【发布时间】:2021-09-17 10:38:15
【问题描述】:

我有一个带有多个架构的 SQL Server 数据库,每个架构都包含多个视图。

我需要在其他数据库中创建相同的视图,因此我想获取脚本中所有视图的 DDL,通过 SQL 生成。

在 Oracle 中这很容易,访问 ALL_VIEWS 并引用 QUERY 列。

我如何在 SQL Server 中做同样的事情?

谢谢

编辑

我知道我可以右键单击并在 SSMS 中获取对象的脚本,我需要为 20/30 视图执行此操作,并且不想手动执行此操作

我尽量避免做手工工作。我想要一个查询,它为一个或多个模式中的所有对象生成脚本。

这是因为模式正在迅速发展,并创建了新视图。我需要在其他几个数据库中重现它们,并且我正在尝试有一个可靠的部署过程

【问题讨论】:

  • 这能回答你的问题吗? Generate script in SQL Server Management Studio
  • 您不必这样做,您会在此处看到选择所有视图的选项,而与那里的架构无关
  • 我明白了,仍然在我的数据库中,我还有其他几个视图,我不需要为其生成脚本,并且必须在此过程中手动取消选择它们。如果可能的话,我想通过查询来做到这一点。感谢您的提醒
  • 咨询您的源代码管理?
  • @Larnu 我在我的问题中指定了我试图避免手动操作。发生人为错误,我想避免它。谢谢

标签: sql sql-server


【解决方案1】:

在对象资源管理器中突出显示Views 节点后,打开Object Explorer Details(如果我没记错的话,请F8Shift+F8) .

这将打开一个窗口,其中包含列表中的所有视图,然后突出显示所需的视图并右键单击 > 脚本。在这里您可以按名称排序、按架构过滤(可能是您所说的“所有者”)等。

我不确定如何在任何场景中选择 20 或 30 个视图而不引入人为错误的可能性。

您可以编写一个执行类似操作的脚本,例如将结果转换为文本,例如

SET NOCOUNT ON;

SELECT 'GO' + OBJECT_DEFINITION(object_id)
  FROM sys.views
  WHERE schema_id = SCHEMA_ID(N'schema_name');

问题是 Management Studio 对文本输出有严重的限制,即使在自定义 Tools > Options > Query Results > SQL Server > Results to Text 并将其设置为最大值 (8,192) 之后也是如此。因此,如果您的任何视图超过 8,192 个字符,则需要work around that somehow

但说真的,拉努是对的。您的视图应该在源代码控制中,这应该是您的部署源,而不是从数据库中手动提取。

【讨论】:

  • 视图遵循特定的命名,另外我需要模式中的所有视图。这就是为什么我在 oracle 中说我可以运行一个查询,仅此而已。试图在 SQL Server 中做同样的事情。感谢您礼貌而有用的回答
  • 编辑后这个答案非常有用。非常感谢
  • @CarloPrato 问题相同 - 编辑(和 cmets)使您的要求更加清晰。
  • 我下次一定会尽量清楚!
  • 与源代码管理相关:你们完全正确,我知道您在说什么。我为一家公司工作,但无权做出这个决定,我做我被允许做的事。不是我的项目,不是我的规则。 (+不是我问的)
【解决方案2】:

如果您想从查询中获取视图定义,可以使用sql_modules

select   m.definition
from     sys.sql_modules   m
join     sys.objects       o  on o.object_id = m.object_id
join     sys.schemas       s  on s.schema_id = o.schema_id
where    o.type = 'V'
and      s.name in ('your', 'schemas', 'here')

根据需要自定义以选择所需的视图。

【讨论】:

  • @CarloPrato Aaron 的回答是打字少了一点,如果你想在某个时候添加其他对象类型,这个会更灵活一些。选择最适合您的!
【解决方案3】:

您可以通过非常标准的方式获取视图、模式和定义:

select * from information_schema.views

【讨论】:

  • 但请参阅 Aaron Bertrand 的文章 here
猜你喜欢
  • 2021-08-21
  • 1970-01-01
  • 2019-11-15
  • 2020-08-08
  • 1970-01-01
  • 2014-12-16
  • 2018-07-30
  • 2022-08-12
  • 2011-07-23
相关资源
最近更新 更多