2011-08-19 35 views
1

我有問題’的nvarchar的值轉換時,轉換失敗」。SQL - 「爲數據類型int‘行爲與查詢奇怪

SELECT table_1.element_description, table_1.element_id, ISNULL(exercise_time_taken, '00:00:00') AS exercise_time_taken 
FROM (SELECT * FROM elements WHERE **`unit_id = 'ndb'`**) as table_1 
LEFT JOIN(SELECT CONVERT(CHAR(8), DATEADD(SS, SUM(DATEDIFF(ss, start_time, finish_time)),'20000101'), 108) AS exercise_time_taken, element_id 
FROM exercises 
WHERE exercises.user_id = 'my_email' **AND element_id <> ALL (SELECT unit_id FROM units)** 
GROUP BY element_id) as table_2 ON table_1.element_id = table_2.element_id 

在i替換加亮的行AND element_id <> ALL (SELECT unit_id FROM units)

WITH

element_id <> 'admin' AND element_id <> 'fc1' AND element_id <> 'ncc1' AND element_id <> 'ncc2' AND element_id <> 'nda' AND element_id <> 'ndb' AND element_id <> 'ngc1' AND element_id <> 'ngc1_demo' AND element_id <> 'ngc2' AND element_id <> 'ngc3' 

這基本上是指定的很長的路要走哪些值不選擇,查詢運行良好一個產生所希望的輸出,如果我不這樣來做,然後我得到ngc1「int數據類型‘錯誤’的nvarchar的值轉換時,轉換失敗」。

我寧願不要手動爲每個值的列表將隨時間增長,我將不得不繼續更新查詢,這不可避免地會在某個時刻被錯過造成更多的工作比必要的代碼。

它爲什麼這樣做?即使根據我最初指定的單位看到樣本線,它也適用於某些而非其他單位。

回答

1

什麼是UNIT_ID在單位表中的數據類型?如果這是一個int,那麼這就是爲什麼你得到這個錯誤。它試圖將element_id轉換爲與您的子查詢值進行比較,並且轉換失敗。

嘗試使用下面的代碼,看看它的工作原理:

AND element_id <> ALL (SELECT CONVERT(VARCHAR, unit_id) FROM units) 
+0

感謝您的答覆,UNIT_ID媒體鏈接是一個nvarchar。我不明白的是,當我用一個檢查單獨替換每個值的代碼時,正如我上面說過的那樣。 –

+0

我想原因是ALL關鍵字的話,因爲這是你脫離了表達的一部分。 element_id和unit_id的數據類型是否完全相同?如果不是,它可能會試圖將它們轉換爲一個共同的分母。我沒有和任何人打過交道,所以我不太清楚所有的影響。下面就來詳細介紹MSDN其使用[鏈接](http://msdn.microsoft.com/en-us/library/ms178543.aspx) –

+0

感謝的鏈接。我不認爲所有是檢查查看MSDN描述的最佳方法。我想我會得到一個單元列表並使用循環來創建我的查詢字符串。這意味着再多一次去分貝,但它正在這樣做,所以我可以讓它和平。歡呼的建議。 –