Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP+SQL Server 2012-违反主键约束-如何避免或帮助重新设计逻辑_Php_Sql Server_Primary Key - Fatal编程技术网

PHP+SQL Server 2012-违反主键约束-如何避免或帮助重新设计逻辑

PHP+SQL Server 2012-违反主键约束-如何避免或帮助重新设计逻辑,php,sql-server,primary-key,Php,Sql Server,Primary Key,这可能更像是一个设计/逻辑类型的问题,但我试图做的是轮询一个web服务,它返回大约15条foo记录。然后,我获取这15条记录并尝试使用它们进行SQL插入。如果我再次轮询并返回20条记录,我将仅尝试插入新的5条记录 我的问题是在第一页加载时,当它执行第一次轮询时,它将始终返回所有记录。当我进行初始插入时,当然通常会出现一系列违反主键约束的错误。这是目前的设计,但我想知道是否有更好的方法,或者这是一个好的方法。关于重复填写php错误日志的一些信息告诉我它不是: 这是否可以通过SQL端的Try/Cat

这可能更像是一个设计/逻辑类型的问题,但我试图做的是轮询一个web服务,它返回大约15条foo记录。然后,我获取这15条记录并尝试使用它们进行SQL插入。如果我再次轮询并返回20条记录,我将仅尝试插入新的5条记录

我的问题是在第一页加载时,当它执行第一次轮询时,它将始终返回所有记录。当我进行初始插入时,当然通常会出现一系列违反主键约束的错误。这是目前的设计,但我想知道是否有更好的方法,或者这是一个好的方法。关于重复填写php错误日志的一些信息告诉我它不是:

这是否可以通过SQL端的Try/Catch简单地解决

架构如下:


如果希望避免引起错误,可以使用下面的SQL语句检查哪些帖子已经存在

SELECT id FROM table WHERE id IN ([id list])
其中id是主键列,table是表,而[id list]是要插入的id的逗号分隔列表。如果列表中有id,请使用PHP函数infrade创建一个


然后只排除返回id的行。

了解sql server添加的IF-NOT EXISTS和TRY-CATCH块-似乎已经解决了问题。谢谢。考虑过这样做,但是增加了轮询->插入往返的开销。ID也是由SQL创建的,该字段目前实际上毫无意义,因为ID不是由web服务生成的。因此,我必须对如何使这些唱片独一无二发挥创意。当我插入时,我没有任何要检查的ID。这是我使用try it的最初原因之一,如果失败,它将转到下一个记录方法。因此,我修改它,首先执行如下检查:如果不存在,则从EventsTable中选择*,其中事件类型为“Alarm”,事件源为“PACU-01 Main Sales”,Space Hum和EventDescription(如湿度过高)和EventDateTime(如“07-25-2015 10:08:42”)以及EventLocation(如“183”)开始插入EventsTable EventDateTime、EventType、EventSource、EventDescription、EventSubSystemKey、EventViewKey、EventLocation值“07-25-2015 10:08:42”、“Alarm”、“PACU-01 Main Sales、Space Hum”,‘湿度太高’、‘2’、‘14’、‘183’看起来就是这样!当我直接在mgmtstudio中运行语句时,我看到了错误和一行语句已终止。但是,我在Apache错误日志中没有看到错误。这感觉不错。想法?如果你自己解决了这个问题,你应该发布你自己问题的答案。另外,您应该使用您在这里关于多字段主键的评论中给我的信息更新原始问题。