微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MS PowerApps:如何使用组合主键“修补” SQL表

如何解决MS PowerApps:如何使用组合主键“修补” SQL表

我对MS PowerApps相对较新

我在带有PowerApp网关的现场服务器上安装了sql Server Express

我的sql Server表具有一个复合主键,它定义为:

CREATE TABLE [GFX_information].[BusinessParnteraccess]
(
    [BpAccesID] [int] IDENTITY(1,1) NOT NULL,[CreatedDate] [datetime] NOT NULL,[UpdatedDate] [datetime] NOT NULL,[LastOperatorID] [int] NOT NULL,[CreateByID] [int] NOT NULL,[BPID] [int] NOT NULL,[AllowedOperatorID] [int] NOT NULL,[AccessFlag] [varchar](10) NULL,PRIMARY KEY CLUSTERED ([AllowedOperatorID] ASC,[BPID] ASC)
                WITH (PAD_INDEX = OFF,STATISTICS_norECOmpuTE = OFF,IGnorE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON,OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [GFX_information].[BusinessParnteraccess] 
    ADD DEFAULT (GETDATE()) FOR [CreatedDate]
GO

ALTER TABLE [GFX_information].[BusinessParnteraccess] 
    ADD DEFAULT (GETDATE()) FOR [UpdatedDate]
GO

我正在尝试找出如何“修补”新记录。

当前,使用OnVisible事件,我创建了一个变量来保存最后一个BpAccesID,像这样

UpdateContext ({varLastAccessID:First(SortByColumns('[GFX_information].[BusinessParnteraccess]',"BpAccesID",Descending)).BpAccesID});

我正在为Patch命令使用一组手动值以进行测试。 Patch命令是

Patch('[GFX_information].[BusinessParnteraccess]',Defaults('[GFX_information].[BusinessParnteraccess]'),{BpAccesID:varLastAccessID+1,CreatedDate: Now(),UpdatedDate:Now(),LastOperatorID:4,CreateByID:4,BPID:342,AllowedOperatorID:4,AccessFlag:"RW" });

但是,这不会引发我可以检测到的错误,也不会看到我所缺少的内容

任何人都可以提供想法吗?

解决方法

我正在阅读此书,这是基于我对SQL Server的了解以及有关Patch的快速阅读而提出的建议。它可能会有所帮助,也可能没有帮助(对不起)。并且也只是确认:我猜问题是“这不会创建新行,我看不到为什么?”

我想您的问题与BPAccessId有关。您已将其设置为身份:[BpAccesID] [int] IDENTITY(1,1) NOT NULL,

但是,您在其中明确插入了一个值

Patch('[GFX_Information].[BusinessParnterAccess]',Defaults('[GFX_Information].[BusinessParnterAccess]'),{BpAccesID:varLastAccessID+1

当然,您通常不能插入SQL Server的IDENTITY列中-您需要将IDENTIY_INSERT设置为on(完成后再关闭)。另外,IDENTITY PK列的原因之一是始终创建具有有效PK的新行。上面的方法如何用于并发,例如,两个用户试图同时创建一个新行?

无论如何,一些潜在的解决方案浮出水面。再一次,这仅基于我对SQL Server的了解。

  • 更改MS Powerapps语句以使用IDENTITY(由您自己决定)-不管是SET IDENTITY_INSERT table ON;还是其他方式
  • BPAccessID删除IDENTITY属性(例如,将其保留为纯整数)
  • 将主键设为所有三列的组合,例如AllowedOperatorID,BPID,BPAccessID
  • 将BPAccessID设置为主键,但为非聚集,并为AllowedOperatorID,BPID
  • 创建唯一的聚集索引

对于后两个,由于BPAccessID仍然是IDENTITY,您需要让SQL Server处理计算新值。

如果您不使用此表的外键,则底部的两个将具有类似的效果。

但是,如果有外键,那么最下面的一个(非聚集的PK和另两个聚集的唯一索引)可能是最接近当前设置的(实际上是我通常在表中所做的事情)这样的结构,无论PowerApp或其他处理程序如何。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?