如何在 Synapse (Azure SQL DW) 上检索视图定义?

Posted

技术标签:

【中文标题】如何在 Synapse (Azure SQL DW) 上检索视图定义?【英文标题】:How to retrieve View definition on Synapse (Azure SQL DW)? 【发布时间】:2021-12-23 20:47:04 【问题描述】:

我是 Synapse (Azure SQL DW) 的新手。目前,DW有很多视图,我需要修改一些。问题是我不知道视图是如何创建的。 是否有查询来检查 Synapse 中的视图定义,或者更具体地说,是使用 SELECT 语句创建视图?

亲切的问候, 肯

【问题讨论】:

【参考方案1】:
SELECT 
CONCAT('IF OBJECT_ID(''',ss.[name],'.',o.[name],''') IS NOT NULL DROP ',CASE type WHEN 'V' THEN 'VIEW' WHEN 'IF' THEN 'FUNCTION' WHEN 'FN' THEN 'FUNCTION' WHEN 'P' THEN 'PROCEDURE' END ,' ',ss.[name],'.',o.[name],'~GO~~'
,replace(replace(replace(sm.[definition],CHAR(13), '~'),CHAR(10), '~'),'~~','~'),'~GO~')
FROM sys.objects AS o 
JOIN sys.sql_modules AS sm
    ON o.object_id = sm.object_id  
JOIN sys.schemas AS ss
    ON o.schema_id = ss.schema_id  

WHERE 1=1 
AND o.type = 'V'
    这适用于我在 Azure Synapse 中使用 SSMS 进行标量函数 (FN) 、内联函数(IF)、过程(P)和视图(V) 在 SSMS CNTL-D(查询结果到网格)中使用上述查询 将结果复制到新查询中。 选择一个波浪号,~ 和 \n(换行符),CNTL-H(替换) 在查找/替换弹出窗口集中使用“replace using REGX”,ALT+E 全部替换,ALT+A

看起来你已经得到了答案,但我在 SSMS 和 Azure Data Studio 中的格式化等方面遇到了困难,所以我想我会分享这个。

【讨论】:

【参考方案2】:

sp_helptext 在 Synapse 中不受支持,但您可以使用视图 sys.sql_modules 及其 definition 列来获取 SQL 文本。一个简单的例子,在专用的 SQL 池中测试:

SELECT *
FROM sys.sql_modules
WHERE definition Like '%someColumn%'

主帮助页面here。您还可以使用函数OBJECT_DEFINITION 并将其传递给object_id,例如

SELECT OBJECT_DEFINITION( object_id ), *
FROM sys.views
WHERE is_ms_shipped = 0;

【讨论】:

谢谢,伙计。我能够跟踪视图定义。这次你帮了我很多。

以上是关于如何在 Synapse (Azure SQL DW) 上检索视图定义?的主要内容,如果未能解决你的问题,请参考以下文章

Azure 数据资源管理器与 Azure Synapse Analytics(又名 SQL DW)

从 Azure Synapse 中的 Apache Spark 将数据写入 SQL DW

Azure Synapse SQL DW 部署是不是类似于 SQL DB 部署?

Synapse SQL DW 中的数据如何传输到 Power BI?

Azure Synapse 管道:如何将增量更新从 SQL Server 移动到 Synapse 以处理数字

(Azure Synapse) 如何在 SQL 脚本中获取环境名称?