Я пытаюсь выполнить массовое обновление (обновление или вставку) хранимой процедуры в базу данных сервера SQL, и я использую sequelizer для подключения базы данных сервера SQL с использованием Node js.
Это набор данных от 1 до 50 тыс. Строк. Любая помощь будет принята с благодарностью!
Я пробую это в nodejs с помощью sequelizer
const upsertedData = [
{
id: "123",
value: "Value 2"
},
{
id: "124",
value: "Value 1"
}
]
const upsert = async (data) => {
await sequelize.query(
`BEGIN
DECLARE @json NVARCHAR(MAX);
SET @json = :dataToBeUpserted
MERGE INTO dbo.tableToBeUpserted AS Target
USING (SELECT * from OpenJson(@json) WITH (
id nvarchar(32),
value nvarchar(32),
)) AS Source
ON (Target.id = Source.id)
WHEN MATCHED THEN
UPDATE SET
Target.value = Source.value
WHEN NOT MATCHED THEN
INSERT (id, value)
VALUES (Source.id, Source.value);
END`,
{
replacements: {
dataToBeUpserted: JSON.stringify(data)
},
}
)
}
upsert (upsertedData)
Однако я получаю эту ошибку:
Неправильный синтаксис рядом с ключевым словом with. Если этот оператор является общим табличным выражением, предложением xmlnamespaces или предложением контекста отслеживания изменений, предыдущий оператор должен заканчиваться точкой с запятой.
и я даже пробовал в SQL Server Management Studio:
DECLARE @json NVARCHAR(MAX);
SET @json = N'[
{"id": 2, "info": {"name": "John", "surname": "Smith"}, "age": 25},
{"id": 5, "info": {"name": "Jane", "surname": "Smith"}, "dob": "2005-11-04T12:00:00"}
]';
SELECT *
FROM OPENJSON(@json)
WITH (
id INT 'strict $.id',
firstName NVARCHAR(50) '$.info.name',
lastName NVARCHAR(50) '$.info.surname',
age INT,
dateOfBirth DATETIME2 '$.dob'
);
Получение той же ошибки:
Неправильный синтаксис рядом с ключевым словом 'with'. Если этот оператор является общим табличным выражением, предложением xmlnamespaces или предложением контекста отслеживания изменений, предыдущий оператор должен завершаться точкой с запятой.
Пожалуйста, помогите мне решить эту проблему.