2014-04-01 57 views
0

我有列AccountNovarchar(50))。當我嘗試使用AccountNo作爲過濾器來搜索數據,然後我得到一個錯誤味精如下在SQL Server 2005中將varchar轉換爲數據類型int時出錯

enter image description here

我dataTable的結構如下:

enter image description here

和我的代碼,這給了我錯誤是

SELECT 
    Date, particular, 
    flag_voucherType +' '+ CONVERT(VARCHAR,C.billNo) AS [VoucherNo.], 
    Debit, Credit, Narration 
FROM 
    ((SELECT 
     Particular, flag_voucherType,accountNo,companyId 
     FROM 
     tblInsertParticularRecord 
     WHERE 
     Credit = 0 
     AND flag = CONVERT(VARCHAR(50), @accountNum) 
     AND companyId = @companyId) AS A 
INNER JOIN 
    (SELECT 
     CONVERT(Decimal,0) AS Debit, Debit AS Credit, accountNo,companyId, billNo 
    FROM tblInsertParticularRecord 
    WHERE 
     flag1 = 0 
     AND flag = CONVERT(VARCHAR(50), @accountNum) 
     AND companyId = @companyId) AS B ON A.accountNo = B.accountNo AND A.companyId = B.companyId) 
INNER JOIN 
    (SELECT 
      Date, billNo, companyId, Narration 
     FROM tblJournalDateNarrationDetails) AS C ON (B.billNo = C.billNo AND B.CompanyId = C.companyId) 
+0

哪些值有@companyId?必須是整數。和@accountNum? – user3401335

+0

看來你還有一個表作爲tblJournalDateNarrationDetails,請分享該表的架構。 – AK47

+1

[踢壞的習慣:選擇錯誤的數據類型](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to-kick-using-the-wrong-data- type.aspx) - 你應該總是使用最合適的數據類型 - 畢竟這就是他們所在的地方! –

回答

0

您是否在意讀錯誤?你發出了一串字符串,但是 - 猜測是什麼 - 從他沒有標記出來的東西已經很清楚,字符串不是int。最後「-1-00-1」不是可以將字符串轉換成字符串的東西。回到有需求的繪圖板。

你的帳戶是一個編碼字符串(帶有「 - 」混合在一起),在這種情況下,你需要一些嚴肅的字符串操作來在轉換轉換之前刪除多餘的符號 - 或者 - 某人真的沒有麻煩檢查帳號是否是字符串。你不會在轉換函數中拋出這種類型的字符串,並期望它能夠神奇地工作。

最有可能的數字是一個代碼 - 這是一個具有商業意義的東西,但對於該程序是一系列字符 - 不,那麼你甚至不應該嘗試將它轉換成數字,你的錯誤。將它們存儲爲字符串。

相關問題