【发布时间】:2021-12-23 20:47:04
【问题描述】:
我是 Synapse (Azure SQL DW) 的新手。目前,DW有很多视图,我需要修改一些。问题是我不知道视图是如何创建的。 是否有查询来检查 Synapse 中的视图定义,或者更具体地说,是使用 SELECT 语句创建视图?
亲切的问候, 肯
【问题讨论】:
标签: azure azure-synapse
我是 Synapse (Azure SQL DW) 的新手。目前,DW有很多视图,我需要修改一些。问题是我不知道视图是如何创建的。 是否有查询来检查 Synapse 中的视图定义,或者更具体地说,是使用 SELECT 语句创建视图?
亲切的问候, 肯
【问题讨论】:
标签: azure azure-synapse
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'
看起来你已经得到了答案,但我在 SSMS 和 Azure Data Studio 中的格式化等方面遇到了困难,所以我想我会分享这个。
【讨论】:
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;
【讨论】: