我在使用SQL Server 2008 R2时遇到了一个奇怪的情况。我的一张大桌子上有太多列(超过100列)。其中两列定义为varchar,但是通过INSERT-VALUES语句将文本数据插入这些列会生成无效的强制转换异常。
CREATE TABLE TooManyColumns (
...
, column_A varchar(20)
, column_B varchar(10)
, ...
)
INSERT INTO TooManyColumns (..., column_A, column_B, ...)
VALUES (..., 'text-A1', 'text-B1', ...)
, (..., 'text-A2', 'text-B2', ...)
导致这些错误
Conversion failed when converting the varchar value 'text-A1' to data type int.
Conversion failed when converting the varchar value 'text-B1' to data type int.
Conversion failed when converting the varchar value 'text-A2' to data type int.
Conversion failed when converting the varchar value 'text-B2' to data type int.
我已经对照列的位置验证了值的位置。此外,将文本值更改为数字或隐式转换为数字的文本,可以修复错误并将数字值插入所需的列。
我应该找些什么来解决这个问题?
我已经在两列中查找了约束,但找不到任何约束-因此,我在错误的位置查找了它们,或者它们不存在。SSMS对象浏览器指出这两列定义为varchar(20)
和varchar(10)
。使用SSMS工具将表的模式编写为查询窗口的脚本也可以确认这一点。
还有什么我应该检查的吗?
您的问题是“我该找什么来解决这个问题?” 因此,这可以回答该问题,但不一定能解决您的问题。
我会这样做:
select * into TooManyColumns_2 from
TooManyColumns
truncate table TooManyColumns
update TooManyColumns_2
set --your troubled columns with text data that is not convetable to int
insert TooManyColumns select * from TooManyColumns_2
如果插入选择成功,则问题很可能是您对插入的列进行排序,因为这证明这些列可以获取文本数据。如果失败,请报告以获取更多故障排除提示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句