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

How to retrieve View definition on Synapse (Azure SQL DW)?

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

亲切的问候, 肯

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;
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'
  1. 这对我有用,在 Azure Synapse 中使用 SSMS 实现标量函数 (FN) , 内联函数(IF), 过程(P), 和视图(V)
  2. 在 SSMS CNTL-D(查询结果到网格)中使用上面的查询
  3. 将结果复制到新查询。
  4. select一个波浪字符,~带\n(换行符),CNTL-H(替换)
  5. find/replace 弹出窗口集中使用“使用 REGX 替换”,ALT+E
  6. 全部替换,ALT+A

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

OBJECT_DEFINITION 绝对是正确的选择。 见 MS docs.

例如,如果您想找出名为 dbo.example 的视图的 create 语句,您可以执行以下操作:

select object_definition(object_id(N'dbo.example')) as [Trigger Definition];   

就是这样!