【问题标题】:Varchar and int columns join in sqlVarchar 和 int 列加入 sql
【发布时间】:2017-11-13 04:59:39
【问题描述】:

我试过这个查询

insert into Dimension_DDTU (BI_Id, BI_Name, DBI_Id, dBI_Name)
    select
        ds.BI_ID,
        dvo.name,
        ds.BI_Id + '' + dm.DBI_Id as DBI_Id,
        dso.dname
    from 
        Census.dbo.SMaster sm
    full outer join 
        C.dbo.dis dso on dso.did = sm.did
    full outer join  
        C.dbo.Div dvo on dvo.dsid = dso.diid
    full outer join 
        b.dbo.DMap ds on ds.DOp_Id = dso.did
    full outer join 
        b.dbo.DsMap dm on dm.DOp_Id = sm.did

这里 BI_Id,DBI_Id 数据类型是 nvarchar(50) 因为我存储的值是这样的 (001,002 ...)

和join中的其他列都是int数据类型,除了

BI_Id and DBI_Id

这显示一个错误

字符串或二进制数据将被截断。

【问题讨论】:

  • 源列的数据类型是什么?它们也是 varchar 类型的吗?
  • 请检查更新 .. 加入的列是 int 数据类型 execpt BI_Id 和 DBI_Id 这些是 varchar(50) 因为我将数据存储在这些列中,例如 001,002 等
  • 但是 BI_id 和 DBI_Id 在源和目标上都存在。所以这有点令人困惑。你能分享Dimension_DDTU的完整结构吗
  • @seesharp whts lenght of DBI_Id 字段检查并确认您在其长度内传递的数据?

标签: sql-server nvarchar truncated


【解决方案1】:

错误提示您在插入时遇到问题。

这里:Dimension_DDTU (BI_Id, BI_Name, DBI_Id, dBI_Name) 列大小之一不足以存储插入的值。

我的水晶球说它是Dimension_DDTU.DBI_Id,它与varchar(50) 大小相同,但至少必须是varchar(100) 才能接受ds.BI_Id + '' + dm.DBI_Id (varchar(50) + varchar(50))。

如果这些 ID 之间有分隔符,那么您也应该按该分隔符的大小增加大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-29
    • 2022-09-26
    • 1970-01-01
    • 2013-01-16
    • 2011-01-21
    • 2013-11-27
    • 2013-07-21
    • 2013-12-31
    相关资源
    最近更新 更多