我试图将一些数据插入表中,然后收到错误消息
Msg 8152, Level 16, State 14, Line 1
String or binary data would be truncated.
现在我知道这是因为试图插入对于列来说太大的数据(在这种情况下是VARCHAR(50)),但它让我想到是否可能:
a)看看哪些特定值会被截断(请记住,这可能会发生在多列中),也许是通过给出将被截断的所有行的输出?
b)如果在批量插入中,有任何方法可以查看每个列将被截断的最大输入数据值(因此我可以看到数据存储类型是否实际需要更改,或者是否只有一个或两个不适合列的情况?)
答案 0 :(得分:12)
没有特别令人满意的方法来查找有问题的行。
This blog post has one solution.(SET ANSI_WARNINGS OFF
并插入临时表,然后对源使用EXCEPT
查找未成功导入的行)
答案 1 :(得分:3)
您可以按如下方式获取表格中列的最大长度
SELECT CHARACTER_MAXIMUM_LENGTH
FROM MyDatabase.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='MyTableName'
INFORMATION_SCHEMA.COLUMNS是一个内置系统View。这应该有助于你上面的第二个问题。
答案 2 :(得分:1)
我找到的最佳解决方案是仅将结构选择到新表中(SELECT INTO FROM WHERE 1 = 0)并比较列类型和长度。Full answer here.
答案 3 :(得分:0)
如果您使用相当简单的类型,可以尝试
select datalength(mycolumn) from mytable where myid = 1