2012-08-23 69 views
0

SQL Server Manager 2008.SQL故障转换为int

我最近更改了存储过程以查看不同的表。

从那时起,我继续接收相同的错误:

“消息245,级别16,状态1,第1行转换将varchar值‘BC8018’为数据类型int时 转换失败”

现在,我将查询分解到根,以查找出现此问题的位置,并确定它发生在我的新表的JOIN上。

现在我比较表中使用的唯一字段Im,并且Pareto和NewPareto都是int。

继承人的代码:

SELECT i.Acct, 
    i.Name, 
    i.Document, 
    i.Part, 
    i.Qty, 
    i.Unit, 
    dbo.PeriodInsert.NewPareto, 
    i.pg, 
    i.[DateTime], 
    i.BinSeqNo 

FROM 
OPENQUERY(SACBAUTO, 'SELECT dbo.iHeads.acct, 
          dbo.iHeads.name, 
          dbo.iLines.Document, 
          dbo.iLines.Part, 
          dbo.iLines.Pg, 
          dbo.iLines.Qty, 
          dbo.iLines.unit, 
          dbo.iHeads.[DateTime], 
          dbo.iLines.BinSeqNo 
        FROM Autopart.dbo.iheads INNER JOIN Autopart.dbo.iLines ON 
        Autopart.dbo.Iheads.document = autopart.dbo.iLines.document 
        WHERE dbo.iLines.Pg not in (''60'',''61'',''62'') 

         ') i 
left JOIN 
dbo.PeriodInsert 
ON 
i.Part collate SQL_Latin1_General_CP1_CI_AS = dbo.PeriodInsert.NewPareto 
WHERE 
(i.[DateTime] BETWEEN '2012-03-01' AND '2012-08-23') AND 
i.Acct = '1557' 

请记住这一点,我休息了原有存储过程的下降但是这是它的根发生。我觉得很奇怪,使用字段pareto的名为NEWpareto的Original表也是一个int。 任何想法,为什么这件事情突然停止工作,只是因为一张桌子?

如果您需要更多信息,请让我知道。

非常感谢

回答

1

dbo.iLines.Part不是int - 它有一个排序规则 - 所以,如果NewPareto是,那么你正试图将其转换为int做加盟。在“BC8018”字段中搜索并检查它是否有效。如果是,那么你将不得不加入i.Partconvert(nvarchar(...), dbo.PeriodInsert.NewPareto)

+0

当然我匹配它错了,对不起刚醒来。傻我 – lemunk