看板 Database 關於我們 聯絡資訊
資料庫名稱:SQL Server 2008 有一table 為 dbo.ConfigParameter 欄位及資料如下 CategoryType | ParameterValue (int) | (nvarchar) ------------------------------------- 11 | 101 11 | 102 11 | 103 16 | Validation,Purchase 我想判斷是否存在一筆CategoryType為11且ParameterValue為101 我執行的SQL如下 IF EXISTS ( SELECT 0 FROM ( SELECT ParameterValue FROM dbo.ConfigParameter WHERE CategoryType = 11 ) v WHERE CAST(ParameterValue AS int) = 101 ) BEGIN --blabalbal.... END 我已確定CategoryType為11的ParameterValue必為數字 但是發生錯誤 「將 nvarchar 值 'Validation,Purchase' 轉換成資料類型 int 時,轉換失敗。」 請問即使我用subquery 它還是會對整張table的所有record做運算嗎? 我後來先用temp table解決了 但還是想知道為何原本的寫法不行 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.72.117.101 ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1458704007.A.E6A.html
cutekid: 直接用 ParameterValue ='101' 判斷就可以了囉 03/23 13:43
我知道 但是我那個101會寫成一個變數 e.g. ParameterValue = @someValue 而這個@someValue是一個int 這樣變成我要寫成 ParameterValue = CAST(@someValue AS nvarchar) 其實我的重點是想問說 為何我原文中的SQL寫法仍然會去運算所有的record ※ 編輯: whitefur (60.249.58.250), 03/23/2016 18:21:29
rockchangnew: 因為沒索引,導致Table Scan,所以每筆都要運算 03/23 20:56