创建要在where子句中使用的函数 - SQL Server

时间:2017-09-07 00:04:52

标签: sql sql-server sql-server-2014

每天我都要运行大量的临时查询,并且所有这些查询在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中选择状态)”

我做了很多研究,但没有任何帮助...

非常感谢。

2 个答案:

答案 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。那里可能还有其他人。