如何从sql列中选择不同数据类型的记录

时间:2014-09-26 03:16:08

标签: sql sql-server

我有两张桌子和一张视图。表中有两行数据类型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。我担心的是不会导致数据丢失。请任何帮助将不胜感激。

3 个答案:

答案 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中相应值的限制