2016-08-09 2 views
1

У меня сложная миграция WebApp из системы Unix/Apache/MySQL в Win2012/Apache/MSSQL. Сначала я установил необходимый sqlsrv-материал, и соединение работает. НО: запросы обновления вызывают mesages ошибки какCodeIgniter/sqlsrv/MSSQL Update-Queries содержат Id-column - Ошибка

Ошибка базы данных Происходило

Номер ошибки: 42000/8102

[Microsoft] [Драйвер ODBC 13 для SQL Server] [SQL Server] Die Ид Identitätsspalte канн Nicht aktualisiert Верден.»последняя часть в основном означает "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-поле является произведением auto-increment, генерируемым в mssql, - и, как вы видите, я не включаю его в свою модель. Как я могу получить Codeigniter, чтобы уменьшить значение UPDATE, чтобы не содержать первичные ключи? Или есть еще один простой способ решить это?

Если это помогает, я могу также изменить Codeigniter, чтобы проверить, содержит ли внутренне сгенерированный запрос поле id, чтобы пропустить их, поскольку они всегда являются автоматически сгенерированными первичными ключами, но мои попытки сделать это не были успешный.

ответ

1

Если идентификатор является полем с автоматическим приращением, не включайте его в запрос ввода/обновления Codeigniter. Он должен быть добавлен автоматически. Просто вставьте/обновите другие значения в БД Ремень: Атрибут Auto-increment установлен на уровне базы данных, а не на Codeigniter.

+0

К сожалению, это не я, который включает в себя ID-поле, это codeigniter. Как я писал, я знаю о ситуации, но я не могу ее исправить. :( – SimonLearner

+0

Ваш запрос неверен. Звучит это правильно? Обновить tb_name Установить $ id = 1 где $ id = 1; – JobSam

+0

Нет, это пока звучит не так. Как я уже говорил дважды, я знаю, ситуации и - и, как я уже упоминал дважды, это не я, который включает в себя столбец идентификатора в запросе.«Мой» запрос - это то, что происходит в модели - вы увидите, что идентификатор встречается ровно один раз, и именно здесь добавляется предложение «где» («id =». $ ItemID »). Моя проблема заключается в том, что где-то во время процесса codeigniter добавляет id-column, и я хотел бы знать, как предотвратить это. – SimonLearner

0

Как я узнал, кто-то сделал недокументированные изменения в последнюю минуту во время миграции и выяснил, что массив данных не содержит идентификатор - и по какой-то причине я никогда не пойму, он думал, что это будет отличная идея для их ввода.

Извините, извините за замешательство!

уроки:

  1. CI прекрасно работает даже с SQLSRV,

  2. Я должен убедиться, что код я создаю выгружается, как я хотел, чтобы это было.

Смежные вопросы