Ошибка синтаксического анализа выделенного пула SQL Azure Synapse

При выполнении приведенного ниже сценария в выделенном пуле 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) = ''

Есть идеи

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

For Clause доступен в SQL Server, базе данных SQL Azure, Azure SQL MI.

  • Он не поддерживается в Azure Synapse Analytics.

Ссылка на изображение: Предложение 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

Результат:

Вы можете зарегистрировать запрос функции здесь.

Привет @Aswin, спасибо, что связались. Если он не поддерживается в Azure Synapse Analytics, можете ли вы объяснить, почему я могу использовать этот код в бессерверном пуле Azure Synapse?

Patterson 13.02.2023 15:38

Можете ли вы посоветовать эквивалентное положение для выделенного пула Azure Synapse Analytics?

Patterson 13.02.2023 15:42

объяснить, почему я могу использовать код в бессерверном пуле Azure Synapse? -- Я пробовал в безсерверном SQL-пуле Synapse. Он работал и не работает в выделенном пуле SQL. Вы можете проверить это с командой продукта. Я поделился ссылкой, чтобы поднять тикет с командой продукта.

Aswin 14.02.2023 07:51

Можете ли вы посоветовать эквивалентное положение для выделенного пула Azure Synapse Analytics? -- Отредактировал ответ с запросом, чтобы преобразовать данные таблицы в данные json.

Aswin 14.02.2023 07:53

Другие вопросы по теме

Как повысить производительность встроенного в Azure пула SQL Serverless Pool в Synapse
Как удалить первую строку всех таблиц в бессерверном пуле Azure Synapse
Операция CREATE EXTERNAL FILE FORMAT не разрешена для реплицированной базы данных в Azure Synapse SQL Встроенный бессерверный пул
Ошибка пула Azure Synapse Serverless SQL: неправильный синтаксис рядом с «РАСПРЕДЕЛЕНИЕМ»
Замените несколько значений между двумя символами в azure sql
Ошибка преобразования данных массовой загрузки (несоответствие типов или недопустимый символ для указанной кодовой страницы) для строки 1 и столбца 4 в Azure Synapse
Ошибка SQLAlchemy: попытка завершить транзакцию не удалась. Соответствующая транзакция не найдена
Импорт данных Datetime в хранилище SQL Server с использованием BCP
Действие фабрики данных Azure выполняется после завершения всех других действий по копированию данных
Как создать внешнюю таблицу для данных в хранилище больших двоичных объектов Azure

Похожие вопросы

Связанная служба синапса Azure для функции Azure в Terraform
Поток данных сопоставления позволяет дублировать записи при использовании UPSERT
Выражение даты Azure Synapse Pipeline — последний понедельник
Почему я получаю «указанный большой двоичный объект не существует» только тогда, когда я пытаюсь написать в него?
Как повысить производительность встроенного в Azure пула SQL Serverless Pool в Synapse
SQL Server: разделите данные в столбце на основе разделителя, а затем соедините со справочной таблицей, чтобы получить связанные значения идентификатора
Azure Synapse Copy Data from BigQuery, Source ERROR [HY000] [Microsoft][BigQuery] (131) Не удалось пройти аутентификацию с помощью Google BigQuery Storage API
Как выбрать символы между подстановочными знаками в выражении фабрики данных Azure для блока переключения
Бессерверный пул Synapse для запроса предыдущих версий дельта-таблицы
Как динамически копировать несколько наборов данных из проекта Google BigQuery с помощью Azure Synapse Analytics