Mule SQL合并'当不与源匹配时'不起作用

时间:2019-01-29 13:14:32

标签: sql-server database mule sql-merge

我无法在Mule Database连接器上使用“当与源不匹配时”子句。 即使不满足子句条件,也会执行“当与源不匹配时”子句中的操作。

我做了很少的示例项目来进一步说明情况。我正在使用sql-server和Mule 3.9.0。

这是源表:

[Source Table][1].

将所有对象从该表移至目标表。在目标表中,还有一个附加标志值“ 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。

实际结果非常不同。这是第一次运行后的目标表

[Target table][2].

因此,所有行都已移动,但除一行以外的所有行的“ isDeleted”都为1。

我对这个结果感到很困惑。 如果有人可以帮助我理解此结果,并可能修复我的merge子句。

感谢所有帮助。谢谢

以下是完整的Mule配置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>

0 个答案:

没有答案