1

嗨,我在尝试使用 IN 子句更新表时遇到问题,我有一个很大的客户端列表,应该更新 4500+。

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

我收到此错误“字符串或二进制数据将被截断”。

我用更少的 id 尝试了相同的脚本,比如说(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 条记录重复代码?

提前致谢

4

2 回答 2

7

与子句"String or binary data would be truncated."无关。IN

这意味着在这一行:

set columnA = 'value' 

您正在设置columnA的东西太长而无法容纳columnA

可能某些ids对应的数据太长了,这些不在你尝试过的前2000个中。

于 2010-08-04T17:45:42.060 回答
0

根据您的错误,在我看来,实际问题出在您正在更新的一个或多个值上。首先,我会尝试验证输入。根据我拥有的记录数量,我已经做了很多方法,value、类型value等做了很多方法,所以这取决于你的具体情况。

最直接的一个(不一定是最好的)是您描述的那个。尝试做 2000。如果可行,请尝试下一个 2000,等等。这既费时又笨重,可能不是最适合您的情况,但我从未见过它无法识别我的问题。

于 2010-08-04T17:41:03.427 回答