我有两张桌子和一张视图。表中有两行数据类型nvarchar和money。我通过从下面的视图中选择来更新表格。
Insert into MyTable
Select * from MyView
最近,此更新由于错误而失败"字符串或二进制数据将被截断。"但是,当我通过select语句修改为类似的东西时。
Select * from Myview WHERE Column is not null
OR
Select * from Myview WHERE Column > 0
以上工作时发出警告Warning: Null value is eliminated by an aggregate or other SET operation.
。我想到可能是其中一个空值记录包含的东西不是空的。我的表列是money类型并接受null。我认为错误可能是由于某些不属于货币数据类型的错误。记录是巨大的。有什么方法可以过滤并返回那些外星人的记录吗?
我还了解到,我可以通过打开ANSI警告设置来消除错误。关Here。我担心的是不会导致数据丢失。请任何帮助将不胜感激。
答案 0 :(得分:2)
字符串或二进制数据会被截断,因为来自MyView的数据大于MyTable中的列大小
使用
Select Max(Len(FieldName)) From MyTable
检查MyTable中nvarchar字段的最大长度 或者你可以在插入数据时使用Left Llike this
Insert into MyTable
Select Left(FieldName,50), Column1 from MyView
注意50应该是MyTable
中nvarchar字段的大小答案 1 :(得分:2)
字符串或二进制数据将被截断是一个非常常见的错误。当我们尝试在字符串(varchar,nvarchar,char,nchar)数据类型列中插入任何大于列大小的数据时,通常会发生这种情况。因此,您需要检查与列宽相关的数据大小,并确定哪个列正在创建问题并进行修复。
这是与stackoverflow中的问题相同的另一个线程。 string or binary data would be truncated
希望这会有所帮助。 此致
答案 2 :(得分:1)
看起来MyWable表中某些列中的数据超出了表MyTable中相应值的限制