我需要确定在INSERT OR IGNORE
语句之后导致约束检查失败的行。
我需要此工具来生成SQL语句,因此我不能将其绑定到具有特定表的特定用例。
这里的挑战是我不知道为要插入的特定表设置了哪些约束。它可能具有外键或UNIQUE
约束,甚至可能附加了CHECK
子句。
因此,我可以从INSERT中学到的是它已失败。现在,我怎么知道哪一行打破了插入?
说明:
我需要一个使用SQL语句/表达式的解决方案,即我无法在其周围编写非SQL代码。
在SQLite中无法使用时出现的奖励问题:
这可以在Postgresql或MySQL中完成吗?
用例示例
以下是将使用此功能的示例(请参见第二个示例和结尾处指向该问题的注释):https://stackoverflow.com/a/53461201/43615
答案 0 :(得分:0)
即使从理论上讲也是不可能的。
并非所有约束失败都涉及要插入的行之外的数据。例如,CHECK约束通常不会。在这种情况下,将没有行ID可以报告。
INSERT可能会使应用于其他表中不同行的多个约束失败。您会对哪一个感兴趣?
如果有一种方法可以根据行ID找出行所在的表,则我不知道它是什么,因此拥有原始行ID可能用处不大
最后,在SQLite中行ID是可选的;您可以使用WITHOUT ROWID
用行ID列创建一个表。