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

标签 sql sql-server t-sql 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)

这个方法我感觉效率很低。我不确定 SQL 是否会重复检查 @ColumnA@ColumnB 是否为 NULL?我听说 SQL 会创建一个执行计划,当存在这样的变量路径时,它可能无法正常工作。

有更好的方法来构造这个存储过程吗?

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

最佳答案

只要做得正确,动态 SQL 就能很好地完成类似的事情。

SQLDenis写得很好blog post关于这个。

关于sql - 在 SQL Server 存储过程中搜索表中指定列值的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6915578/

相关文章:

sql - 计算存储过程中的百分比

php - php 应用程序和 ms sql server 中的区域字符(抛光)问题

sql-server - T-SQL 计算时间窗口内的事件数

sql - 将数据从一个表复制到另一个表时,使用参数还是列值更好?

sql-server - 完整发票号码 + 逗号分隔的 SQL 列表 (TSQL)

mysql - 如何优化查询?我能读懂什么? (如果可以的话,用俄语,或英语)

sql - 如何使用自连接进行更新?

sql - activerecord 中最近的内部查询

SQL SUM 表达式和锁

sql - 从指定路径解析 XML