Мне не удалось получить предложение «когда не сопоставлено по источнику» с соединителем базы данных Mule.Действие в предложении «когда не соответствует источнику» выполняется, даже если условие условия не выполняется.
Я сделал небольшой пример проекта, чтобы более подробно объяснить ситуацию.Я использую sql-сервер и Mule 3.9.0.
Вот исходная таблица:
Идея состоит в том, чтобы переместить всеиз этой таблицы в целевой таблице.В целевой таблице есть еще одно значение флага 'isDeleted', и идея состоит в том, чтобы установить это 1, когда строка удаляется из источника.
Вот фактическое предложение слияния:
MERGE [mergetest_target] AS target
USING(
SELECT
#[payload.get("id")] AS id,
#[payload.get("text")] AS text
) AS SOURCE ON (target.id = source.id)
WHEN NOT MATCHED BY SOURCE THEN
UPDATE SET
isDeleted = 1
WHEN MATCHED THEN
UPDATE SET
text = source.text,
isDeleted = 0
WHEN NOT MATCHED BY TARGET THEN
INSERT
(id, text, isDeleted)
VALUES
(source.id, source.text, 0)
;
Результатом первого диска должно быть то, что все строки из исходной таблицы перемещаются в целевую таблицу, и все значения «isDeleted» равны 0.
Фактический результат сильно отличается.Вот таблица назначения после первого запуска
Таким образом, все строки были перемещены, но все, кроме одного, имеют isDeleted как 1.
Я довольно озадачен этим результатом.Если кто-то может помочь мне понять этот результат и, возможно, исправить мое положение о слиянии.Спасибо
Вот полная конфигурация мула xml:
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:db="http://www.mulesoft.org/schema/mule/db" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/db http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd">
<flow name="mergetestFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/mergetest" doc:name="HTTP"/>
<db:select config-ref="PowerBI_AzureSQL" doc:name="Database">
<db:parameterized-query><![CDATA[Select * from mergetest_source;]]></db:parameterized-query>
</db:select>
<logger message="#[payload]" level="INFO" doc:name="Logger"/>
<db:update config-ref="PowerBI_AzureSQL" bulkMode="true" doc:name="Database">
<db:parameterized-query><![CDATA[MERGE [mergetest_target] AS target
USING(
SELECT
#[payload.get("id")] AS id,
#[payload.get("text")] AS text
) AS SOURCE ON (target.id = source.id)
WHEN NOT MATCHED BY SOURCE THEN
UPDATE SET
isDeleted = 1
WHEN MATCHED THEN
UPDATE SET
text = source.text,
isDeleted = 0
WHEN NOT MATCHED BY TARGET THEN
INSERT
(id, text, isDeleted)
VALUES
(source.id, source.text, 0)
;]]></db:parameterized-query>
</db:update>
</flow>
</mule>