【问题标题】:Executing scripts as XML in Azure Synapse Analytics在 Azure Synapse Analytics 中以 XML 形式执行脚本
【发布时间】:2020-09-24 22:16:41
【问题描述】:

here 所述,我无法通过将脚本解析为 XML 来执行脚本。我看到基于 MSDN 的 Synapse 不支持它。有人可以帮助我如何在 SQL DW 中实现这一点吗?我有一个包含所有 SQL 语句的表,我想通过循环遍历该列中的每条记录来执行它们。

DDL:

CREATE TABLE [#Temp]
(
JOB_ID INT NOT NULL,
SQL_STMNT NVARCHAR(2000)
);

DML:

INSERT INTO #Temp
SELECT 100, 'SELECT * FROM Table_A WHERE MyDate = @ProcessDate'
UNION 
SELECT 103, 'SELECT * FROM Table_B WHERE MyDate = @ProcessDate AND MyCode = ''ABC'''
UNION 
SELECT 110, 'SELECT * FROM Table_C WHERE MyDate = @ProcessDate AND MyID = 345'
UNION 
SELECT 200, 'SELECT * FROM Table_D WHERE MyDate = @ProcessDate'
UNION 
SELECT 230, 'SELECT * FROM Table_E WHERE MyDate = @ProcessDate'

【问题讨论】:

    标签: sql-server tsql azure-sqldw azure-sql-data-warehouse


    【解决方案1】:

    您可以使用STRING_AGG function:

    DECLARE @sql nvarchar(max) = (
     SELECT STRING_AGG(CAST(SQL_STMNT as nvarchar(max)), '; ') WITHIN GROUP (ORDER BY JOB_ID ASC)
     FROM #Temp
    );
    exec(@sql);
    

    【讨论】:

    • 谢谢格雷格!为什么UNION ALL 在这里?
    • 你想要发生什么?我想不是将所有查询合并为一个结果吗?随意替换为分号 (;)
    • 不,我想我想遍历每条记录并执行它们。
    • @Julaayi 编辑了我的答案。那应该做你想做的事。但是您也可以在临时表上使用 while 循环和 ROW_NUMBER 函数来执行循环并选择下一行。但是,如果您所做的只是执行查询,那么效率会降低。
    • 谢谢格雷格!如果我想做 SELECT *, '@MyVariable' FROM TABLE_A 怎么办
    猜你喜欢
    • 2020-09-05
    • 2021-02-17
    • 2020-09-16
    • 2021-03-01
    • 2021-05-14
    • 2021-01-14
    • 2022-06-23
    • 2022-08-04
    • 2021-06-02
    相关资源
    最近更新 更多