2011-10-12 41 views
2

我試圖將stf.PrimarySchoolID(一個整數)添加到此現有查詢中。我有一個bat文件,它將使用此SQL語句導出CSV。然而,當我打開導出CSV我收到此錯誤:我錯過了什麼? SQL轉換失敗

Msg 245, Level 16, State 1, Server [SERVER NAME], Line 13 
Conversion failed when converting the varchar value ',"' to data type int. 

注:stf.StaffNumber不是整數,它是字母數字。

SET NOCOUNT ON; 

SELECT '"'+ 
    stf.StaffNumber +'","'+ 
    stf.LastName +'","'+ 
    stf.FirstName +'","' + 
    COALESCE(u.username, '')+'","'+ 
    COALESCE(sfc.[NAME],'') +'",'+ 
    stf.PrimarySchoolID 
FROM dbo.UDF_GetCurrentAcademicSessions() cur 
    JOIN dbo.Course c ON c.AcadSessionID = cur.AcadSessionId    
    JOIN dbo.Staff stf ON stf.StaffID = c.PrimaryTeacherID 
    JOIN dbo.StaffClassification sfc ON sfc.StaffClassificationID = stf.PrimaryClassificationID 
    LEFT OUTER JOIN dbo.[User] u ON u.UserID = stf.UserID 

您是否發現我的錯誤?我對SQL語句不太熟悉,所以我們不勝感激。

回答

1

嘗試追加到它之前鑄造stf.StaffNumber爲VARCHAR:

CAST(stf.StaffNumber AS VARCHAR) 

這同樣適用於你要追加一個字符串,任何數值。

編輯

我相信這應該面面俱到:

SELECT '"'+  
CAST(stf.StaffNumber AS VARCHAR) +'",'+  
CAST(stf.PrimarySchoolID AS VARCHAR) +',"'+  
stf.LastName +'","'+  
stf.FirstName +'","' +  
ISNULL(u.username, '')+'","'+  
ISNULL(sfc.[NAME],'') +'",'+  
CAST(stf.PrimarySchoolID AS VARCHAR) 

在一個側面說明,你應該使用的情況下ISNULL那裏只有一個條件。 COALESCE將正常工作,但它的有線多個條件,即COALESCE(Col1, Col2, Col3, Col4)

+0

這是問題所在。謝謝你,感謝COALESCE的信息。每個人的回答都是正確的,但是,我選擇了你的,因爲你發現並修復了*我自己做的另一個錯誤*:重複'stf.PrimarySchoolID':P – joshmax

+0

很高興你的工作:) –

1

更改SELECT到最後一行:

CAST(stf.PrimarySchoolID as varchar)

+0

這就是問題所在。謝謝。 – joshmax

1

你要科協stf.PrimarySchoolID爲字符類型。

... 
CAST(stf.PrimarySchoolID AS VARCHAR(20)) -- You can fix length as needed 
... 
+0

這是個問題。謝謝。並且,感謝包含varchar長度。看了一下關於它的信息,我瞭解了它。 – joshmax

1

你需要在級聯使用它之前投stf.PrimarySchoolID爲字符類型(比如,VARCHAR):

SET NOCOUNT ON; 

SELECT '"'+ 
    stf.StaffNumber +'",'+ 
    convert(varchar, stf.PrimarySchoolID) +',"'+ 
    stf.LastName +'","'+ 
    stf.FirstName +'","' + 
    COALESCE(u.username, '')+'","'+ 
    COALESCE(sfc.[NAME],'') +'",'+ 
    stf.PrimarySchoolID 
FROM dbo.UDF_GetCurrentAcademicSessions() cur 
    JOIN dbo.Course c ON c.AcadSessionID = cur.AcadSessionId    
    JOIN dbo.Staff stf ON stf.StaffID = c.PrimaryTeacherID 
    JOIN dbo.StaffClassification sfc ON sfc.StaffClassificationID = stf.PrimaryClassificationID 
    LEFT OUTER JOIN dbo.[User] u ON u.UserID = stf.UserID 

可以使用SQL Server's CONVERT or SQL ANSI's CAST做類型轉換兩種。

+0

這是問題所在。謝謝你,謝謝你的鏈接。 – joshmax

-1

由於stf.PrimarySchoolID是一個i​​nt,並且您試圖將它連接到一個varchar()字段,所以出現此錯誤。試試看:

SELECT '"'+ 
    stf.StaffNumber +'",'+ 
    cast(stf.PrimarySchoolID as varchar(10)) +',"'+ 
    stf.LastName +'","'+ 
    stf.FirstName +'","' + 
    COALESCE(u.username, '')+'","'+ 
    COALESCE(sfc.[NAME],'') +'",'+ 
    stf.PrimarySchoolID 
-1

連接表列可能不匹配或加入給定的列。仔細檢查哪些列,​​邏輯是否加入。