作者whitefur (白毛)
看板Database
标题[SQL ] SELECT, 不符合条件的也会运算吗
时间Wed Mar 23 11:33:24 2016
资料库名称: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://webptt.com/cn.aspx?n=bbs/Database/M.1458704007.A.E6A.html
1F:推 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
2F:推 rockchangnew: 因为没索引,导致Table Scan,所以每笔都要运算 03/23 20:56