2010-08-04 58 views
1

嗨我有一个问题,当试图更新一个表使用IN子句,我有一个应该更新的客户端的大列表4500+。问题更新表使用IN子句与ids的巨大列表

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

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

我试着用更少的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条记录?

在此先感谢

回答

7

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

这意味着在这条线:

set columnA = 'value' 

要设置columnA的东西,太长columnA举行。

也许某些id s有相应的数据太长,这些都不是你尝试过的第一个2000年。

+0

+1:我在SQL Server 2005上重现了错误,试图将“abcdef”放入NVARCHAR(5)列。 – 2010-08-04 17:48:17

+0

+1同意该消息与IN子句的大小无关 – Andomar 2010-08-04 17:48:39

+0

这正是发生的情况,谢谢。 – Albert 2010-08-04 17:55:20

0

在我看来,根据你的错误,实际问题是与一个或多个要更新的值。我会尝试验证输入,首先。根据我有的记录数量,value的大小,value的类型等,我已经完成了很多方面的工作,这取决于您的具体情况。

最简单的一个(不一定是最好的)就是你描述的那个。尝试做2000年。如果这样做,尝试下2000年等,这是时间密集和笨重,可能不是最适合你的情况,但我从来没有看到它不能识别我的问题。