2

尝试在 PowerApps 中对表使用 Patch 函数时收到 SQL INSERT 错误,该表具有依赖于尚未修补的第二个表的主键的外键。

这是有道理的。如何允许我修补具有空白依赖项的表?那么怎么做呢?

以下是所有 5 个表的 FK/PK 依赖项:

在此处输入图像描述

到目前为止,我已经尝试过:

  • 在 FK 列上允许 NULL
  • 从 FK UPDATE 和 DELETE 中删除了 CASCADE

还有什么想法吗?我特别需要示例函数。谢谢

4

2 回答 2

2

Patch 函数将返回已更新(或插入)的对象,其中填写了服务器中的任何字段,因此您可以使用存储它并稍后使用来检索服务器生成的 id。使用Last在大多数情况下都可以使用,但如果您在应用程序中同时有两个用户,或者如果表开始变得太大(并且并非所有这些都将一次在本地缓存),则可能会失败。

Set(
    patchResult,
    Patch(
        '[dbo].[dateTable]',
        Defaults('[dbo].[dateTable]'),
        {
            siteId: varSiteID,
            readingDate: Now()
        }));

//Patch values into readingTable

Patch(
    '[dbo].[readingTable]',
    Defaults('[dbo].[readingTable]'),
    {
        dateId: patchResult.dateId,
        unitNum: 1, 
        xzyName: 1,
        avgJJk: 1,
        prevLLk: 1,
        readingNotes: "This is awesome"
    }
);
于 2018-10-12T13:06:33.003 回答
-1

刚想出来这个:

您必须先修补这些,以便首先修补 PK,然后通过 Last() 函数抓取并插入(作为 FK)到后续修补程序中。

希望这可以帮助其他人。

示例

//Patch values into dateTable

Patch('[dbo].[dateTable]',
    Defaults('[dbo].[dateTable]'),
        {
            siteId: varSiteID,
            readingDate: Now()
        }
);

//Patch values into readingTable

Patch('[dbo].[readingTable]',
    Defaults(
        '[dbo].[readingTable]'),
        {
            dateId: Last('[dbo].[dateTable]').dateId, <--BINGO
            unitNum: 1, 
            xzyName: 1,
            zyxNum: 1,
            xkdFactor: 1, 
            supplyXya: 1, 
            supplyUio: 1, 
            sortNum: 1,
            currentUys: 1,
            avgJJk: 1,
            prevLLk: 1,
            readingNotes: "This is awesome"
        }
);

//Patch values into the imageTable

ForAll(
    colImageGallery,
    Patch(
        '[dbo].[imageTable]',
            Defaults('[dbo].[imageTable]'),
        {
            readingId: Last('[dbo].[readingTable]').readingId, <--BINGO
            photo: image,
            photoNotes: " "
        }
    )
);
于 2018-10-12T06:14:12.257 回答