消息8152,级别16,状态14,字符串或二进制数据将被截断

问题描述

我有一个将记录放入表的过程,具体说来是

从字段数据类型money到字段数据类型numeric(11,0)
insert into tab1(decimal_field_1) 
    select convert(numeric(11,0),money_field_1) 
    from tab2

执行后,我得到警告信息:

状态8的状态16的Msg 8152 字符串或二进制数据将被截断

我有意识地将该列从money转换为decimal(11,0),并且我不想使用set ansi_warnings OFF

那我怎么办?如何正确转换数据?

解决方法

该错误通常与截断字符串(例如varchar,nvarchar)有关,而不是数字(例如,字符串太长而无法容纳)。

如果我的货币值转换为数值(11,0)太大,则会出现错误Msg 8115,Level 16,State 8,Line 5 Arithmetic overflow error converting money to data type numeric.

因此,错误不太可能由CONVERT触发,而是在INSERT中触发。您可以通过执行select convert(numeric(11,0),money_field_1) from tab2来进行测试,该方法应该可以正常工作-显示CONVERT很好。

您只插入1列十进制字段_1吗?

  • 如果是这样,您确定十进制字段_1也是数字(11,0)而不是varchar或nvarchar吗?
  • 如果要插入其他列,请检查其他字段。错误可能来自那里。
,

不推荐使用money数据类型一段时间。看看有关如何避免这种情况的article

“钱在-922,337,203,685,477.5808(-922,337 万亿)和922,477.5807(922,337万亿)”

尝试使用DECIMAL(19,4)

  private void Button_Click(object sender,RoutedEventArgs e)
    {
        IHTMLDocument2 doc = webBrowser.Document as IHTMLDocument2;
        if (doc != null)
        {
            StringBuilder html = new StringBuilder(doc.body.outerHTML);
            dynamic document = webBrowser.Document;
            string str =  document.getElementById("sb_form_q").value;
            var words = new[] { str,"Bing" };
            foreach (String key in words)
            {
                String substitution = "<span style='background-color: rgb(255,255,0);'>" + key + "</span>";
                html.Replace(key,substitution);
            }
            doc.body.innerHTML = html.ToString();
            document.getElementById("sb_form_q").value = str;
        }
    }

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...