Выполнение скриптов как XML в Azure Synapse Analytics

Я не могу выполнить сценарий, анализируя его как XML, как упоминалось здесь. Я вижу, что это не поддерживается в Synapse на основе MSDN. Может ли кто-нибудь помочь мне, как я могу добиться этого в 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'

person Julaayi    schedule 05.06.2020    source источник


Ответы (1)


Вы можете использовать _ 1_ функция:

DECLARE @sql nvarchar(max) = (
 SELECT STRING_AGG(CAST(SQL_STMNT as nvarchar(max)), '; ') WITHIN GROUP (ORDER BY JOB_ID ASC)
 FROM #Temp
);
exec(@sql);
person GregGalloway    schedule 05.06.2020
comment
Спасибо, Грег! Почему UNION ALL здесь? - person Julaayi; 05.06.2020
comment
Чего вы хотели? Я думаю, не объединить все запросы в один результат? Не стесняйтесь заменять точкой с запятой (;) - person GregGalloway; 05.06.2020
comment
Нет, я думаю, что хочу перебрать каждую запись и выполнить их. - person Julaayi; 06.06.2020
comment
@Julaayi отредактировал мой ответ. Это должно делать то, что вы хотите. Но вы также можете использовать цикл while и функцию ROW_NUMBER во временной таблице, чтобы буквально выполнить цикл и выбрать следующую строку. Но это менее эффективно, если все, что вы делаете, - это выполнение запросов. - person GregGalloway; 06.06.2020
comment
Спасибо, Грег! Что, если я хочу выполнить SELECT *, '@MyVariable' FROM TABLE_A при условии, что '@MyVariable' всегда стоит перед FROM, и я могу передать эту переменную из хранимой процедуры? - person Julaayi; 06.06.2020
comment
@Julaayi, как насчет обертывания функции STRING_AGG, например: REPLACE(STRING_AGG(....), '@MyVariable', @MyVariable) - person GregGalloway; 06.06.2020