撰寫查詢以連接來自兩個表的資料并將其分組。如果定義連接的兩行被注釋掉,查詢將正確回傳。這是查詢(連接注釋掉了):
SELECT tblTurbineLocations.TurbineLayoutProjectID as ProjectID
,TurbineLayoutNumber
,Count(HubHeight) as NumTurbines
,tblTurbineLocations.WTCode
FROM [TurbineLayout].[dbo].[tblTurbineLocations]
--LEFT OUTER JOIN [TurbineModel].[dbo].[tblTurbineModels]
--ON str(tblTurbineLocations.WTCode) = str(tblTurbineModels.WTCode) --Need to force string conversion to avoid data type conflict.
WHERE tblTurbineLocations.TurbineLayoutProjectID = 2255
AND tblTurbineLocations.TurbineLayoutNumber IN (406, 407)
GROUP BY tblTurbineLocations.TurbineLayoutProjectID ,tblTurbineLocations.TurbineLayoutNumber ,tblTurbineLocations.WTCode
洗掉兩條帶注釋的連接行,然后嘗試在 WTCode 欄位上進行連接。這將回傳以下錯誤:
訊息 8114,級別 16,狀態 5,第 2
行將資料型別 nvarchar 轉換為浮點數時出錯。
錯誤指向第 2 行,而不是包含連接的行。該錯誤引發 nvarchar 無法轉換為浮點數。但是,第 2 行中的列 tblTurbineLocations.TurbineLayoutProjectID 不是 nvarchar;它是一個整數:

查看查詢中的其他列,除了連接列 WTCode(一個表中的 nvarchar(11),另一個表中的 nvarchar(5))之外,沒有一個屬于 nvarchar 型別。兩者都被轉換為字串以避免不同的錯誤(通過轉換為 str 來解決):
無法解決等于操作中“Latin1_General_CI_AS”和“SQL_Latin1_General_CP1_CI_AS”之間的排序規則沖突。
WTCode 在查詢中沒有被轉換為浮點數。
我的代碼或方法有什么錯誤?
uj5u.com熱心網友回復:
正如拉努在評論中指出的那樣:
問題是“str”函式需要一個浮點數,因此在輸入 nvarchar 時會回傳錯誤。為了解決排序規則沖突,可以在連接之后使用 COLLATE 來確認應該對 nvarchar 欄位使用什么排序規則。因此,以下作業:
SELECT tblTurbineLocations.TurbineLayoutProjectID as ProjectID
,TurbineLayoutNumber
,Count(HubHeight) as NumTurbines
,tblTurbineLocations.WTCode
FROM [TurbineLayout].[dbo].[tblTurbineLocations]
LEFT OUTER JOIN [TurbineModel].[dbo].[tblTurbineModels]
ON tblTurbineLocations.WTCode = tblTurbineModels.WTCode
COLLATE Latin1_General_CS_AS_KS_WS
WHERE tblTurbineLocations.TurbineLayoutProjectID = 2255
AND tblTurbineLocations.TurbineLayoutNumber IN (406, 407)
GROUP BY tblTurbineLocations.TurbineLayoutProjectID ,tblTurbineLocations.TurbineLayoutNumber ,tblTurbineLocations.WTCode
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/514586.html
標籤:tsql
