0

SQL 服务器管理器 2008。

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

从那以后我一直收到同样的错误:

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

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

现在我比较了我在表中使用的唯一字段,Pareto 和 NewPareto 都是整数。

继承人的代码:

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 的原始表也是一个 int 表。任何想法为什么这东西突然停止工作只是因为一张桌子?

如果您需要更多信息,请告诉我。

非常感谢

4

1 回答 1

1

dbo.iLines.Part不是一个 int - 它有一个排序规则 - 所以如果 NewPareto 是,那么你正在尝试将它转换为一个 int 来进行连接。在该字段中搜索“BC8018”并检查它是否有效。如果是,那么您将必须i.Part加入convert(nvarchar(...), dbo.PeriodInsert.NewPareto)

于 2012-08-23T07:58:35.657 回答