【问题标题】:How to get data from different tables如何从不同的表中获取数据
【发布时间】:2017-08-19 14:54:45
【问题描述】:

你能帮我解决这个问题吗?我必须进行查询以使用内部联接从不同的表中获取数据。

这是我的查询:

select 
    a.DocEntry,
    a.CardName,
    a.Address,
    a.Address2, 
    a.CardCode,
    a.TaxDate,
    b.Dscription, 
    b.Quantity,
    b.Price,
    b.GTotal,
    b.WhsCode,
    c.WhsName,
    d.CompnyName, 
    d.CompnyAddr, 
    d.Phone1,
    e.U_NAME
from OPOR a 
        inner join POR1 b on a.DocEntry = b.DocEntry
        inner join OWHS c on a.DocEntry = c.WhsCode
        inner join OADM d on a.DocEntry = d.CompnyName
        inner join OUSR e on a.DocEntry = e.U_NAME
where b.DocEntry = 36

但我收到此错误:

将 nvarchar 值“OEC Computers UK”转换为数据类型 int 时,消息 245,级别 16,状态 1,行 1 转换失败。

【问题讨论】:

  • 这些,inner join OADM d on a.DocEntry = d.CompnyName inner join OUSR e on a.DocEntry = e.U_NAME 看起来像是在比较数字和字符串。
  • 请告诉我 OPOR .DocEntry、OWHS.Whscode、OADM.CompnyName 和 OUSR.U_Name 的数据类型

标签: sql sql-server inner-join


【解决方案1】:

您正在将 NVarchar 列与 int 值或列进行比较。 如果此列包含至少一个无法转换的值,则会引发您提供的异常。 (sql server 无法隐式解析值)

检查查询的这一部分,看起来像是在 varchar 列和整数列上进行了连接

inner join OADM d on a.DocEntry = d.CompnyName
inner join OUSR e on a.DocEntry = e.U_NAME

如果有必要 -(不建议这样做) - 要进行类似的连接,您必须将 int 列转换为 nvarchar 例如:

inner join OUSR e on CAST(a.DocEntry AS NVARCHAR(255)) = e.U_NAME

还有

如果DocEntry的数据类型是NVarchar,则可能会抛出异常

b.DocEntry = 36

所以你必须使用它来代替它

b.DocEntry = '36'

【讨论】:

    【解决方案2】:

    “DocEntry”、“WhsCode”、“CompnyName”、“U_NAME”是什么类型的列?

    有“OEC Computers UK”不能转换成整数。

    该列的数据必须是数字,否则无法比较。

    【讨论】:

    • 这些问题应该是 cmets,即使在我投反对票之后,你的声誉也足够高。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 2015-03-11
    • 2017-02-24
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多