代码之家  ›  专栏  ›  技术社区  ›  m.edmondson

什么设置会影响隐式转换?

  •  0
  • m.edmondson  · 技术社区  · 11 年前

    我可以访问两个数据库,这两个数据库应该是彼此的副本。在两者上都有一个名为 GROUP 带有列 GROUP_INVOICE_NUMBER (varchar(20), not null) .

    在我可以执行的第一个数据库上:

    select *
    from GROUP
    where GROUP_INVOICE_NUMBER = 4
    

    这很好。然而,第二次我得到:

    转换时,Msg 245,Level 16,State 1,Line 1转换失败 将varchar值“1626CR2”转换为数据类型int。

    我知道这两个数据库实例之间一定有区别,我猜它们与隐式转换和/或警告级别有关。

    你认为这种区别在哪里?

    注:

    我知道这是 很坏的 然而,在数据库设计中,我们遇到了一个遗留系统,我们正在努力改进这个系统(因此我们需要创建一个测试环境),因为我们看到了这个问题。

    2 回复  |  直到 11 年前
        1
  •  1
  •   R S P    11 年前

    这是因为没有显示错误的数据库在GROUP_INVOICE_NUMBER列中只包含整数值。这意味着列值不包含字母数字字符。请这样尝试:

    select *
    from GROUP
    where GROUP_INVOICE_NUMBER = '4'
    
        2
  •  0
  •   HLGEM    11 年前

    不同之处在于,第二个数据库的列中的数据不是数字,因此根本无法进行隐式转换。在任何情况下,您都不应该依赖于隐式转换。要么正确存储数据,要么进行显式转换。 这应该对以下两方面都有效:

    select *
    from GROUP
    where GROUP_INVOICE_NUMBER = '4'