web
You’re offline. This is a read only version of the page.
close
Skip to main content

Notifications

Announcements

Community site session details

Community site session details

Session Id :
Power Apps
Answered

SQL HELP:

(1) ShareShare
ReportReport
Posted on by 1,855

Hey everyone, @wyotim, this is your area of expertise isn't it?

 

My first time SQL app and am having a challenge:

  • 5 tables. Each with a Primary Key
  • Foreign Key relationships between tables as shown below
  • patchError.png
  • The issue:
    • When I Patch the readingTable, which has a Foreign Key dependency on the dateTable, I get the error:
    • "The INSERT statement conflicted with the FOREIGN KEY constraint named "FK_reading_to_dateTable". The error occured on database-x, table-y, column "dateId".
  • The problem appears to be that I'm patching the readingTable BEFORE the dateTable has any data in it.
  • I made the dateId column in the readingTable allow null, but still wouldn't Patch.

How do I Patch a table that has a foreign key dependency on another table that has not been patched yet?

 

What am I missing?

 

Thank you

Categories:
I have the same question (0)
  • seadude Profile Picture
    1,855 on at

    Do I have to do this? https://docs.microsoft.com/en-us/sql/relational-databases/tables/disable-foreign-key-constraints-with-insert-and-update-statements?view=sql-server-2017.

    This kind of looks like disabling the FK altogether.

  • wyotim Profile Picture
    2,545 on at
    While I am not an expert in SQL, that article is what I would suggest. The problem is that the PK/FK constraint is actually doing it’s job by making it so you can’t have a child record without a parent.

    Disabling the constraint doesn’t cause too many issues if you are in the PowerApps/Power BI feedback loop. It is easy to relate the tables in either one using filters (or just telling Power bI they are related in the data model).

    The main issue I would see is the possibility of orphaned records (if you were to delete a parent record, the child records would still be around). One nice thing about the PK/FK restraint is that it can prevent this or give options in how to handle it, like removing all the child records if the parent record is deleted.

    Beyond that, I don’t know what other issues may arise, especially in any other ways you might be connecting to and using that data, so hopefully someone with more knowledge will chime in.

    Is there a reason why you have foreign keys without a primary? Is it that you are just building the data set or something like that?
  • seadude Profile Picture
    1,855 on at

    Thanks for the detailed response @wyotim. I just realized I have "CASCADE" set for each FK. I went in and set that at "NO". We'll see if that works.

     

    RE: Why FK's and no PK's?:

    • Each table does have a PK.
    • Are you seeing something in the table that looks incorrect?

    This is my first SQL rodeo, so definitely not 100% solid on what I'm doing.

  • wyotim Profile Picture
    2,545 on at

    I wasn't too clear in my question. I was more wondering why you would have child records (by using an FK reference) but no parent records (the PK used as an FK in the child table). 

     

    To analogize, it is like the parent table is a record of transactions (like grocery receipts with customer names, date/times, store number, etc.) and the child table is a record of items within each transaction (milk, eggs, etc.). It seemed like you were adding items but didn't have a transaction to tie them to. Does that sound right or am I misunderstanding?

  • seadude Profile Picture
    1,855 on at

    You have it correct. How do I patch all 5 tables at once so that the FK's work? I think thats my problem. Chicken and egg thing.

  • wyotim Profile Picture
    2,545 on at

    You will need to patch them in order of dependency I think. So siteTable before dateTable, dateTable before readingTable, etc. And you will need to have a way to grab the PK from the parent so the child can use it as an FK.

  • seadude Profile Picture
    1,855 on at

    Hm. That feels tricky. How are other people patching multiple SQL tables that have FK dependencies? I see Paul O'Flaherty patching away on SQL YouTube videos. but no details on how to setup Looks like he's using SQL Views to display information. Not sure whether he is writing to the Views (or if that is even possible)

     

    I deleted all FK dependencies for now to test patching individually. Maybe i'll bring in one at a time now and test your idea.

     

    Thanks for the insights @wyotim, its always nice working with ya!

  • seadude Profile Picture
    1,855 on at

    OOOOooohhh.... what do you think of this?

     

    Conditions for Modifying Data in Partitioned Views

    The value being inserted into the partitioning column should satisfy at least one of the underlying constraints; otherwise, the insert action will fail with a constraint violation. 
  • Verified answer
    seadude Profile Picture
    1,855 on at

    Hey buddy! I got it (following your lead of course:) )

     

    Two of the tables (redacted, sorry) are for adding new items in the app, not really part of this Patch so I left them out.

     

    For the other three tables, you were right @wyotim, it was all about the Patch order and grabbing the PK's after each Patch and slapping them into the FK of the following table. I used the Last() function for this.

     

    Example:

    //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: " "
     }
     )
    );

    Woohoo! That one was not simple to find info on.

  • wyotim Profile Picture
    2,545 on at
    Nicely done! One small suggestion: be sure to watch any sorting when using Last() as you may find you get the wrong FK if you sort by another column. I only say that because I seem to always be sorting by something other than the PK. Max() can be nice in those cases if you are using an integer for your PK.

    Again, well done and, as always, a pleasure to work with you!

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Forum hierarchy changes are complete!

In our never-ending quest to improve we are simplifying the forum hierarchy…

Ajay Kumar Gannamaneni – Community Spotlight

We are honored to recognize Ajay Kumar Gannamaneni as our Community Spotlight for December…

Leaderboard > Power Apps

#1
WarrenBelz Profile Picture

WarrenBelz 739 Most Valuable Professional

#2
Michael E. Gernaey Profile Picture

Michael E. Gernaey 343 Super User 2025 Season 2

#3
Power Platform 1919 Profile Picture

Power Platform 1919 268

Last 30 days Overall leaderboard