在SQL Server存储过程中搜索表中指定列值的有效方法是什么?

Sco*_*pey 2 sql t-sql sql-server stored-procedures

我有一个用于"搜索"表的存储过程.
我希望与指定的字段完全匹配.

我想知道有哪些方法可以有效地实现此功能!

这是我最初尝试的一个例子.我创建了一个复合WHERE子句:

CREATE PROCEDURE usp_TableA_Search
    @ColumnA int = null,
    @ColumnB uniqueidentifier = null
AS
    SELECT *
    FROM TableA
    WHERE
        (@ColumnA IS NULL OR @ColumnA = ColumnA)
        AND
        (@ColumnB IS NULL OR @ColumnB = ColumnB)
Run Code Online (Sandbox Code Playgroud)

这种方法对我来说效率很低.我不确定SQL是否会反复检查@ColumnA@ColumnB查找NULL?我听说SQL会创建一个执行计划,当有像这样的可变路径时,它可能不会有效.

有没有更好的方法来构建这个sproc?

另外,我可以使用哪些资源来确定SQL代码的效率?

DFo*_*k42 5

只要你做得对,动态SQL就可以很好地完成这样的事情了.

SQLDenis写了一篇关于此的好文章.