如何在 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?