#azure-synapse #open-json
Вопрос:
У меня есть команда OPENJSON, которая берет проанализированный JSON и присоединяет его к существующей таблице.
Когда я добавляю ЛЕВОЕ СОЕДИНЕНИЕ, я получаю ошибку:
конфликт параметров сортировки между «Latin1_General_BIN2» и «SQL_Latin1_General_CP1_CI_AS»
Таблица имеет те же параметры сортировки для всех строковых столбцов, что и: SQL_Latin1_General_CP1_CI_AS
Я попытался добавить СОПОСТАВЛЕНИЕ DATABASE_DEFAULT в ЛЕВОЕ СОЕДИНЕНИЕ, но без каких-либо улучшений.
Запрос, который я использую, примерно такой:
DECLARE @json NVARCHAR(MAX) = '
{
"ExampleJson": {
"stuff": [
{
"_program_id": "hello",
"work_date": "2021-03-23 00:00:00"
}
]
}
}';
SELECT *
FROM
OPENJSON
(
(
@json
), '$.ExampleJson.stuff'
)
WITH (
[program_id] NVARCHAR(255) '$."program_id"'
,[work_date] DATETIME '$."work_date"'
) [json_data]
LEFT JOIN
[existing_db_data]
ON [existing_db_data].[program_id] = [json_data].[program_id]
Ответ №1:
Интересная проблема, которую я не могу воспроизвести, но вы должны быть в состоянии решить, поместив правильные параметры сортировки либо в предложение WITH, либо после соединения, например
WITH (
[program_id] NVARCHAR(255) COLLATE SQL_Latin1_General_CP1_CI_AS '$."_program_id"'
,[work_date] DATETIME '$."work_date"'
) [json_data]
LEFT JOIN [existing_db_data] d ON d.[program_id] = [json_data].[program_id] COLLATE SQL_Latin1_General_CP1_CI_AS
Одного должно быть достаточно, вам не нужно и то, и другое.
Комментарии:
1. Спасибо за предложение, к сожалению, ни то, ни другое не работает.
2. Ах, если я сделаю это наоборот, я получу лучшие результаты, т. Е. Latin1_General_BIN2 в столбце existing_db_data
3. Интересный. Каковы параметры сортировки вашего выделенного пула SQL?
4. То же, что и столбцы: SQL_Latin1_General_CP1_CI_AS
5. Я попробовал еще раз с SQL_Latin1_General_CP1_CI_AS, но все равно не повезло. Сопоставление BIN2 левой таблицы, однако, в порядке, так что продолжим с этим спасибо.