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

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

亲切的问候, 肯

【问题讨论】:

    标签: azure azure-synapse


    【解决方案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'
    
    1. 这适用于我在 Azure Synapse 中使用 SSMS 进行标量函数 (FN) 、内联函数(IF)、过程(P)和视图(V)
    2. 在 SSMS CNTL-D(查询结果到网格)中使用上述查询
    3. 将结果复制到新查询中。
    4. 选择一个波浪号,~ 和 \n(换行符),CNTL-H(替换)
    5. 在查找/替换弹出窗口集中使用“replace using REGX”,ALT+E
    6. 全部替换,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;
      

      【讨论】:

      • 谢谢,伙计。我能够跟踪视图定义。这次你帮了我很多。
      猜你喜欢
      • 2021-11-20
      • 2020-11-06
      • 2021-11-15
      • 2021-03-18
      • 2020-12-27
      • 2021-08-26
      • 2021-11-20
      • 2020-08-21
      • 2017-07-28
      相关资源
      最近更新 更多