2010-11-27 101 views
2

時轉換失敗我有表類別(c)和另一個表(x),其中的列可以包含以逗號分隔的cat ID作爲varchar數據類型。我想選擇相關的類別,但是我的錯誤是「將varchar值5'轉換爲數據類型int時轉換失敗。」試圖選擇時:將varchar值'1'轉換爲數據類型int

SELECT ID, Title FROM c WHERE ID IN (SELECT catIDs FROM x WHERE ID=any); 

子查詢返回的數據,如「1,3,4」

+1

如果將WHERE ID IN替換爲WHERE CAST(ID as varchar(5))IN,會發生什麼情況? – CarneyCode 2010-11-27 09:42:06

+0

我同意@Traroth - 以逗號分隔值的字符串形式返回的ID列表表明**數據庫設計有問題**。 「x」表中是否真的有`catIDs`列?或者,這可能只是一個例子,實際上`1,3,4`是從存儲的rpocedure返回的,或者從平面文件中檢索到的? – 2010-11-27 10:07:11

回答

4

您需要將子查詢返回的1,3,4字符串拆分爲單獨的int值。 SQL Server沒有內置函數來執行此操作,但可以使用this user-defined function

在數據庫中創建功能dbo.Split然後如下重新編寫查詢:

SELECT ID, Title 
FROM c 
WHERE ID IN 
    (
    SELECT s 
    FROM dbo.Split(',', '1,3,4') 
) 

我替換示例中的子查詢結果1,3,4縮短查詢,並使其更容易理解。

1

如果我得到它的權利,你確實有,如「1,3,4」的價值觀在您的專欄catIDs 。所以你應該在你的子查詢中選擇一個子字符串。順便說一句,我不是MS SQL Server專家,但它可能是一個不好的數據庫設計。我不確定RDBMS引擎會在這種情況下使用索引...

相關問題