每天我都要运行大量的临时查询,并且所有这些查询在where子句中具有相同的条件。
我想知道是否有办法创建函数或别名或其他东西,以便轻松快速地编写查询。
通常查询类似于:
select *
from tbl_1
where customer in ('ctm1','ctm2','ctmetc')
and isnull(status,'c') in (select status from tbl_status)
我想知道的是,是否可以开发类似的东西:
select *
from tbl_1
where customer in ('ctm1','ctm2','ctmetc')
and function.status = 'C'
其中function.status ='C'参考“isnull(status,'c')in(从tbl_status中选择状态)”
我做了很多研究,但没有任何帮助...
非常感谢。
答案 0 :(得分:0)
如果可接受,则表示在100%的时间内强制执行表/索引扫描(即使谓词的其他部分允许搜索,您仍然会对状态进行范围扫描)。然后一定要试一试。当然,目前使用ISNULL的做法是一样的,所以你可能不会让事情变得更糟。正确(或至少是SARGEible)写它的方式就是把它写成如下......
SELECT
*
FROM
dbo.tbl_1 t1
WHERE
t1.customer IN ( 'ctm1', 'ctm2', 'ctmetc' )
AND (
t1.Status IS NULL
OR
EXISTS (SELECT 1 FROM dbo.tbl_status s WHERE t1.status = s.status)
);
-- OR --
SELECT
*
FROM
dbo.tbl_1 t1
WHERE
t1.customer IN ( 'ctm1', 'ctm2', 'ctmetc' )
AND (
t1.Status IS NULL
OR
t1.Status IN (SELECT s.Status FROM dbo.tbl_status s)
);
答案 1 :(得分:0)
还有另一种看待这个的方法。陈述的问题是您必须反复键入相同的字符串。
我建议找一种自动输入的方法。有一些实用程序可以解决这个问题。我使用的那个叫做AutoHotKey。那里可能还有其他人。