CodeIgniter / sqlsrv / MSSQL更新 - 查询包含Id列 - 错误

时间:2016-08-09 17:27:02

标签: php sql-server codeigniter sqlsrv

我很难将WebApp从Unix / Apache / MySQL系统迁移到Win2012 / Apache / MSSQL。首先,我安装了您需要的sqlsrv-stuff,并且连接正常。 但: 更新查询会导致错误消息,如

  

发生数据库错误

     

错误号码:42000/8102

     

[Microsoft] [SQL Server的ODBC驱动程序13] [SQL Server]死   id-Identitätsspaltekannnicht aktualisiert werden。“最后一部分   基本上意味着“ID-identy列可能不会更新。”

生成的更新查询如下所示:

UPDATE "dbo"."table" SET "id" = 1, "someStuff" = 5 WHERE "id" = 1

我的模型使用如下语句:

$data = array (
   'someStuff' => (int) $stuff
);
$this->db->update('table',$data,"id = ".$itemID);

我理解该消息,因为该语句包含一个SET“id”,这显然是无关紧要的,因为id-field是在mssql中生成的自动增量事件 - 正如你所看到的,我没有将它包含在我的模型中。如何让Codeigniter减少UPDATE - 语句不包含主键?或者还有另一种简单的方法来解决这个问题吗?

如果有帮助,我不妨修改Codeigniter以检查内部生成的查询是否包含id字段以跳过这些字段,因为它们总是自动递增的主键,但是我的试图这样做并没有成功。

2 个答案:

答案 0 :(得分:1)

如果id是自动增量字段,请不要将其包含在Codeigniter插入/更新查询中。它应该自动添加。只需在DB上插入/更新其他值即可 Rem:自动增量属性在数据库级别设置,而不是在Codeigniter上设置。

答案 1 :(得分:0)

正如我发现的那样,有人在迁移过程中做了无记录的最后一分钟更改,发现数据阵列没有包含id - 并且由于某种原因我永远不会理解他认为这是一个好主意把它们放进去。

很抱歉抱歉!

经验教训:

  1. 即使使用SQLSRV,CI也能正常工作,

  2. 我必须确保我创建的代码按照我的意愿上传。