Ignoring a NULL parameter in T-SQL

后端 未结 10 952
余生分开走
余生分开走 2020-12-03 01:40

I want to be able to pass in a list of parameters, and ignore the ones which are NULL. So that the query is in effect pretending that the filter isn\'t there and ignoring it

10条回答
  •  青春惊慌失措
    2020-12-03 02:00

    Once you get more than a couple of these, then yes: it starts to get pretty slow. In such cases, I tend to use generated TSQL - i.e.

    DECLARE @sql nvarchar(4000)
    SET @sql = /* core query */
    
    IF @name IS NOT NULL
        SET @sql = @sql + ' AND foo.Name = @name'
    
    IF @dob IS NOT NULL
        SET @sql = @sql + ' AND foo.DOB = @dob'
    
    // etc
    
    EXEC sp_ExecuteSQL @sql, N'@name varchar(100), @dob datetime',
            @name, @dob
    

    etc

    Note that sp_ExecuteSQL caches query-plans, so any queries with the same args can potentially re-use the plan.

    The downside is that unless you sign the SPROC, the caller needs SELECT permissions on the table (not just EXEC permissions on the SPROC).

提交回复
热议问题