PowerApps:如何使用外键修补多个SQL表?

时间:2018-10-12 04:06:49

标签: foreign-keys azure-sql-database powerapps powerapps-formula

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

有道理。如何允许我修补具有空白依赖关系的表?那怎么办呢?

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

enter image description here

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

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

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

2 个答案:

答案 0 :(得分:2)

Patch function将返回更新(或插入)的对象,并填写服务器中的所有字段,因此您可以使用存储它,并稍后使用它来检索服务器生成的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"
    }
);

答案 1 :(得分:-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: " "
        }
    )
);