Проблема обновления таблицы с помощью предложения IN с огромным списком идентификаторов - PullRequest
1 голос
/ 04 августа 2010

Привет У меня возникла проблема при попытке обновить таблицу с помощью предложения IN, у меня большой список клиентов, которые должны быть обновлены 4500+.

Update table 
set columnA = 'value'
where ID in ( biglistofids )  //biglistofids > 4500 ids

Я получаю эту ошибку «Строковые или двоичные данные будут обрезаны.»

Я попробовал тот же сценарий с меньшим количеством идентификаторов, скажем (2000), и он работал нормально.

Я также пытался использовать временную таблицу, но получил ту же ошибку.

  1. SELECT Id INTO tmpTable FROM dbo.table WHERE id IN (biglistofids) //create temporal table succesfully
  2. Update table set columnA = 'value' FROM table INNER JOIN tmpTable ON table.ID = tmpTable.ID

Есть ли способ справиться с этим, не повторяя код для каждых 2000 записей?

Заранее спасибо

Ответы [ 2 ]

7 голосов
/ 04 августа 2010

"String or binary data would be truncated." не имеет ничего общего с предложением IN.

Это означает в этой строке:

set columnA = 'value' 

вы устанавливаете columnA на то, что слишком долго, чтобы удерживаться в columnA.

Возможно, некоторые id имеют соответствующие данные, которые являются слишком длинными, и они не относятся к первому 2000 году, который вы пробовали.

0 голосов
/ 04 августа 2010

Мне кажется, исходя из вашей ошибки, что настоящая проблема связана с одним или несколькими значениями, которые вы обновляете.Сначала я бы попробовал проверить ввод.Я сделал это многими способами, основываясь на количестве записей, которые у меня были, размере value, типе value и т. Д., Так что это будет зависеть от вашего конкретного сценария.Вперед (не обязательно самый лучший) - это тот, кого вы описываете.Попробуйте сделать 2000. Если это работает, попробуйте следующий 2000, и т. Д. Это требует много времени и неуклюже, и может быть не лучшим в вашей ситуации, но я никогда не видел, чтобы он не смог определить мою проблему.

...