如何在 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'
- 这对我有用,在 Azure Synapse 中使用 SSMS 实现标量函数 (FN)
, 内联函数(IF), 过程(P), 和视图(V)
- 在 SSMS CNTL-D(查询结果到网格)中使用上面的查询
- 将结果复制到新查询。
- select一个波浪字符,~带\n(换行符),CNTL-H(替换)
- find/replace 弹出窗口集中使用“使用 REGX 替换”,ALT+E
- 全部替换,ALT+A
看起来你已经得到了答案,但我在 SSMS 和 Azure Data Studio 中遇到格式化等问题,所以我想分享这个。
OBJECT_DEFINITION
绝对是正确的选择。
见 MS docs.
例如,如果您想找出名为 dbo.example
的视图的 create
语句,您可以执行以下操作:
select object_definition(object_id(N'dbo.example')) as [Trigger Definition];
就是这样!
我是 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'
- 这对我有用,在 Azure Synapse 中使用 SSMS 实现标量函数 (FN) , 内联函数(IF), 过程(P), 和视图(V)
- 在 SSMS CNTL-D(查询结果到网格)中使用上面的查询
- 将结果复制到新查询。
- select一个波浪字符,~带\n(换行符),CNTL-H(替换)
- find/replace 弹出窗口集中使用“使用 REGX 替换”,ALT+E
- 全部替换,ALT+A
看起来你已经得到了答案,但我在 SSMS 和 Azure Data Studio 中遇到格式化等问题,所以我想分享这个。
OBJECT_DEFINITION
绝对是正确的选择。
见 MS docs.
例如,如果您想找出名为 dbo.example
的视图的 create
语句,您可以执行以下操作:
select object_definition(object_id(N'dbo.example')) as [Trigger Definition];
就是这样!