[SQL ] SELECT, 不符合條件的也會運算嗎

看板Database (資料庫)作者 (白毛)時間8年前 (2016/03/23 11:33), 8年前編輯推噓2(200)
留言2則, 2人參與, 最新討論串1/1
資料庫名稱: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

03/23 13:43, , 1F
直接用 ParameterValue ='101' 判斷就可以了囉
03/23 13:43, 1F
我知道 但是我那個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

03/23 20:56, , 2F
因為沒索引,導致Table Scan,所以每筆都要運算
03/23 20:56, 2F
文章代碼(AID): #1MyWw7vg (Database)
文章代碼(AID): #1MyWw7vg (Database)