Conditional Operator in SQL Where Clause

前端 未结 5 2054
我寻月下人不归
我寻月下人不归 2020-12-20 16:47

I\'m wishing I could do something like the following in SQl Server 2005 (which I know isnt valid) for my where clause. Sometimes @teamID (passed into a stored procedure) wi

5条回答
  •  情话喂你
    2020-12-20 17:10

    Without using dynamic SQL, the most performant option is:

    IF @teamid = 0
      BEGIN
    
        SELECT t.teamid
          FROM TEAM t
         WHERE t.teamid > 0
    
      END
    ELSE
      BEGIN
    
        SELECT t.teamid
          FROM TEAM t
         WHERE t.teamid = @teamid
    
      END
    

    Using Dynamic SQL:

    DECLARE @SQL NVARCHAR(4000)
       SET @SQL = 'SELECT t.teamid
                     FROM TEAM t
                    WHERE 1 = 1 '
    
       SET @SQL = @SQL + CASE @teamid
                           WHEN 0 THEN ' AND t.teamid > 0 '
                           ELSE ' AND t.teamid = @teamid '
                         END
    
    BEGIN
    
      EXEC sp_EXECUTESQL @SQL N'@teamid INT', @teamid
    
    END
    

    Beware that sp_EXECUTESQL caches the query plan, while EXEC will not. Read this: http://www.sommarskog.se/dynamic_sql.html

提交回复
热议问题