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

在SQL Server存储过程中搜索表中指定列值的有效方法是什么?,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我有一个用于“搜索”表的存储过程。 我希望与指定的字段完全匹配 我想知道我可以用什么方法有效地实现这个功能 这是我最初尝试的一个例子。我创建了一个复合WHERE子句: CREATE PROCEDURE usp_TableA_Search @ColumnA int = null, @ColumnB uniqueidentifier = null AS SELECT * FROM TableA WHERE (@ColumnA IS NULL O

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

我想知道我可以用什么方法有效地实现这个功能

这是我最初尝试的一个例子。我创建了一个复合
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)
我觉得这种方法效率很低。我不确定SQL是否会反复检查
@ColumnA
@ColumnB
中的
NULL
?我听说SQL将创建一个执行计划,当存在这样的可变路径时,它可能无法正常工作

是否有更好的方法来构建此存储过程?


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

动态SQL可以很好地解决类似的问题,只要您做得正确


SQLDenis对此写了一篇好文章。

本文还提到了另一篇我觉得有用的文章: