我不確定如何更正下面的 SQL 以停止接收以下錯誤,將 Nvarchar 值“Dist00”轉換為 int 時轉換失敗。這是Sql:
SELECT g.[Period], g.BuyingGroup, g.NonJDEGroup, g.GroupCode, g.Percentage,
c.DistributorId as CustomerNumber,
ci.CustomerName,
ri.ShipTo,
ci.ShipToTiedTo,
b.BidId,
b.Account,
ri.InvoiceNumber,
ri.InvoiceDate,
ri.DateModified,
i.ItemId,
CASE WHEN ri.NetBilled=0 THEN round(ri.SalePrice * ri.Quantity, 2) ELSE 0 END AS SaleTotal,
CASE WHEN ri.NetBilled=1 THEN round(ri.BidPrice * ri.Quantity, 2) ELSE 0 END AS BidTotal,
CASE WHEN ri.SalePrice <= ri.BidPrice THEN 0 ELSE (ri.SalePrice - ri.BidPrice) * ri.Quantity END AS RebateTotal,
ri.NetBilled,
ri.Quantity,
b.Bid_TypeId,
b.Bid_ClassId,
CAST(CASE WHEN (ri.DateModified >= @SalesStartDate and ri.DateModified <= @SalesEndDate) THEN 1 ELSE 0 END AS bit) AS isCurrent,
CAST(CASE WHEN (ri.DateModified >= @LateStartDate and ri.DateModified <= @LateEndDate) THEN 1 ELSE 0 END AS bit) AS isLate
FROM [BQM_Dev].dbo.Claims c
INNER JOIN [BQM_Dev].dbo.Claim_Items i ON c.ClaimId=i.ClaimId
INNER JOIN [BQM_Dev].dbo.Rebate_Items ri ON ri.Claim_ItemId = i.Claim_ItemId
INNER JOIN [BQM_Dev].dbo.Bids b on b.BidId = i.BidId
INNER JOIN [BQM_Dev].dbo.Bid_Classes bc ON bc.Bid_ClassId=b.Bid_ClassId
LEFT OUTER JOIN #CustomerInformation ci ON ci.CustomerNumber=c.DistributorId AND ci.RecordType='C'
LEFT OUTER JOIN #CustomerInformation si ON si.CustomerNumber=c.DistributorId AND si.RecordType IN ('SF','BH')
INNER JOIN [BQM_Dev].dbo.FunctionalGroupings g on b.DistributorId=g.CustomerNumber
WHERE bc.IncludeInReporting=1
AND ri.DateModified between @LateStartDate and @SalesEndDate
AND ri.InvoiceDate > @SalesCutOffDate
當我將 Select 陳述句更改為“*”時,它作業正常。以下連接可能是問題所在,因為它們連接一側為 int 的欄位,另一側為 nvarchar 的欄位。這些是行:
LEFT OUTER JOIN #CustomerInformation ci ON ci.CustomerNumber=c.DistributorId AND ci.RecordType='C'
LEFT OUTER JOIN #CustomerInformation si ON si.CustomerNumber=c.DistributorId AND si.RecordType IN ('SF','BH')
INNER JOIN [BQM_Dev].dbo.FunctionalGroupings g on b.DistributorId=g.CustomerNumber
因此, ci.CustomerNumber int 但 c.DistributorId 是 nvarchar,b.DistributorId 也是 Nvarchar 而 g.CustomerNumber 是 int。
我試過轉換,我只是不確定該怎么做。任何意見將是有益的。
uj5u.com熱心網友回復:
您回傳的一個或多個列正在嘗試轉換為 INT。乍一看,這似乎是一種隱式轉換,而且很可能是您沒有預料到的。
如果您足夠了解您的資料集,您可能能夠挑選出導致問題的列。如果你不這樣做,你可以簡單地將它們一一注釋掉,直到你可以執行你的代碼。最近評論的專欄是罪魁禍首。
然后,您的選擇是確定該列的正確資料型別并明確區分大小寫,或者從結果集中洗掉有問題的行。也許您需要在連接中使用另一個謂詞或在哪里?
uj5u.com熱心網友回復:
“b.DistributorId 是 Nvarchar”
我猜其中一個值是“Dist00”,您試圖將其與 int 0 進行比較。
uj5u.com熱心網友回復:
實際上,我可以通過對上述 SQL 進行以下更新來完成這項作業:我在 int 表上添加了 Convert 函式并將其轉換為 nvarchar(6)。
左外連接 #CustomerInformation ci ON Convert(nvarchar(6), ci.CustomerNumber)=c.DistributorId AND ci.RecordType='C' 左外連接 #CustomerInformation si ON Convert(nvarchar(6), si.CustomerNumber)=c .DistributorId AND si.RecordType IN ('SF','BH') INNER JOIN [BQM_Dev].dbo.FunctionalGroupings g on b.DistributorId=Convert(nvarchar(6), g.CustomerNumber)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/524791.html
標籤:sqltsql
