При выполнении приведенного ниже сценария в выделенном пуле SQL Azure Synapse я получаю сообщение об ошибке:
Parse error at line: 11, column: 1: Incorrect syntax near 'FOR'.
Однако, если я выполняю тот же код в бессерверном пуле Azure Synapse, он работает нормально.
DECLARE
@EnrichedViewDatabase sysname,
@EnrichedViewSchema sysname,
@EnrichedColumnSuffix varchar(50),
@LanguageCode varchar(10),
@BaseTableSuffix varchar(50),
@PreviewOnly bit, --Indicate whether to preview the SQL Script (without creating the views) = 1 ; Create views = 0;
@CurrentDatabase sysname,
@CurrentDatabaseSchema sysname
SET @EnrichedViewDatabase = 'DedicatedSQLPool'
SET @EnrichedViewSchema = 'dbo'
SET @EnrichedColumnSuffix = 'code'
SET @LanguageCode = 1033
SET @BaseTableSuffix = ''
SET @PreviewOnly = 0
SET @CurrentDatabase = 'dataverse_montaguqa1_unq5a4857c03d0545c6b9ad616ca59a7'
SET @CurrentDatabaseSchema = 'dbo'
DECLARE @ColumnMetadata nvarchar(MAX), @ColumnMetadataSQL nvarchar(MAX)
--Define the SQL statement to retrieve column metadata from the Lake Database managed by Synapse Link for Dataverse
--Results will be stored as a JSON document in a variable
SET @ColumnMetadataSQL = 'SET @ColumnMetadataOUT = (
SELECT TABLE_SCHEMA,
TABLE_NAME,
COLUMN_NAME,
ORDINAL_POSITION,
DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = ''dbo''
AND TABLE_NAME NOT IN (''OptionsetMetadata'', ''GlobalOptionsetMetadata'',''StateMetadata'',''StatusMetadata'', ''TargetMetadata'')
AND TABLE_NAME LIKE ''%' + @BaseTableSuffix + '''
FOR JSON AUTO)'
DECLARE @ParmDefinition NVARCHAR(MAX);
SET @ParmDefinition = N'@ColumnMetadataOUT NVARCHAR(MAX) OUTPUT';
EXECUTE sp_executesql @ColumnMetadataSQL, @ParmDefinition, @ColumnMetadataOUT=@ColumnMetadata OUTPUT;
--Declare a variable to store a SQL statement for creating enriched views
DECLARE @SQL nvarchar(MAX) = ''
Есть идеи
For Clause доступен в SQL Server, базе данных SQL Azure, Azure SQL MI.
Ссылка на изображение: Предложение FOR (Transact-SQL) — SQL Server | Обучение Майкрософт
В выделенном пуле SQL синапса вы можете использовать функции concat и string_agg и создавать данные Json вручную вместо использования For JSON auto. Я пробовал это с примерами данных.
Пример исходных данных:
Запрос для преобразования данных таблицы в формат Json:
select concat('{',string_agg(concat('{id:"',id,'",name:"',name,'"}'),','),'}')
as JSON_data from tab1
Результат:
Вы можете зарегистрировать запрос функции здесь.
Можете ли вы посоветовать эквивалентное положение для выделенного пула Azure Synapse Analytics?
объяснить, почему я могу использовать код в бессерверном пуле Azure Synapse? -- Я пробовал в безсерверном SQL-пуле Synapse. Он работал и не работает в выделенном пуле SQL. Вы можете проверить это с командой продукта. Я поделился ссылкой, чтобы поднять тикет с командой продукта.
Можете ли вы посоветовать эквивалентное положение для выделенного пула Azure Synapse Analytics? -- Отредактировал ответ с запросом, чтобы преобразовать данные таблицы в данные json.
Привет @Aswin, спасибо, что связались. Если он не поддерживается в Azure Synapse Analytics, можете ли вы объяснить, почему я могу использовать этот код в бессерверном пуле Azure Synapse?