繁体   English   中英

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

[英]Creating a function to be used in the where clause - SQL Server

每天我必须运行许多临时查询,而所有这些查询在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'对应于“(从tbl_status中选择状态)中的isnull(status,'c')”

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

非常感谢。

如果可以接受,则意味着强制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)
        );

还有另一种方式可以看这个。 所述问题是您必须一遍又一遍地键入相同的字符串。

我建议寻找一种自动打字的方法。 有实用程序可以解决此问题。 我使用的一个称为AutoHotKey 可能还有其他人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM