SQL Server 2008 - Conditional Query

前端 未结 6 1499
说谎
说谎 2020-12-10 19:09

SQL is not one of my strong suits. I have a SQL Server 2008 database. This database has a stored procedure that takes in eight int parameters. For the sake of keeping this q

6条回答
  •  春和景丽
    2020-12-10 19:37

    best source for dynamic search conditions:

    Dynamic Search Conditions in T-SQL by Erland Sommarskog

    there are a lot of subtle implications on how you do this as to if an index can be used or not. If you are on the proper release of SQL Server 2008 you can just add OPTION (RECOMPILE) to the query and the local variable's value at run time is used for the optimizations.

    Consider this, OPTION (RECOMPILE) will take this code (where no index can be used with this mess of ORs):

    WHERE
        (@search1 IS NULL or Column1=@Search1)
        AND (@search2 IS NULL or Column2=@Search2)
        AND (@search3 IS NULL or Column3=@Search3)
    

    and optimize it at run time to be (provided that only @Search2 was passed in with a value):

    WHERE
        Column2=@Search2
    

    and an index can be used (if you have one defined on Column2)

提交回复
热议问题