PowerApps:如何使用外键修补多个 SQL 表?
PowerApps: How to Patch multiple SQL tables with foreign keys?
我尝试在 table 上使用 PowerApps 中的 Patch 函数时出现 SQL INSERT 错误,该 table 的外键依赖于第二个 [=32= 的主键] 尚未修补。
这是有道理的。我怎么能允许 Patch a table 有一个空白的依赖项?那么如何才能做到呢?
以下是所有 5 个 table 的 FK/PK 依赖项:
到目前为止我已经尝试过:
- 在 FK 列上允许 NULL
- 从 FK UPDATE 和 DELETE 中删除了 CASCADE
还有什么想法吗?我特别需要示例函数。
谢谢
刚想出这个:
您必须按顺序修补这些 PK,以便首先修补 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: " "
}
)
);
Patch function will return the updated (or inserted) object with any fields from the server filled out, so you can use store it and use later to retrieve the server-generated id. Using Last 大部分时间都可以使用,但如果您同时有两个用户在应用程序中,或者如果 table 开始变得太大(而不是所有这些都会立即缓存在本地。
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"
}
);
我尝试在 table 上使用 PowerApps 中的 Patch 函数时出现 SQL INSERT 错误,该 table 的外键依赖于第二个 [=32= 的主键] 尚未修补。
这是有道理的。我怎么能允许 Patch a table 有一个空白的依赖项?那么如何才能做到呢?
以下是所有 5 个 table 的 FK/PK 依赖项:
到目前为止我已经尝试过:
- 在 FK 列上允许 NULL
- 从 FK UPDATE 和 DELETE 中删除了 CASCADE
还有什么想法吗?我特别需要示例函数。 谢谢
刚想出这个:
您必须按顺序修补这些 PK,以便首先修补 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: " "
}
)
);
Patch function will return the updated (or inserted) object with any fields from the server filled out, so you can use store it and use later to retrieve the server-generated id. Using Last 大部分时间都可以使用,但如果您同时有两个用户在应用程序中,或者如果 table 开始变得太大(而不是所有这些都会立即缓存在本地。
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"
}
);