SQL Server条件选择取决于输入参数

时间:2011-06-28 06:25:12

标签: sql-server

我在MS SQL中有一个存储过程,需要2个参数,例如

CREATE PROCEDURE MyProcedure
    @A      INT,
    @B      INT
AS
BEGIN
    SELECT  ...

    FROM    ...

    WHERE   [A] = @A AND [B] = @B 

END

我的问题是。如果我有@B = 0我想要在这样的选择行中[A] = @ A,而不是[B] = @ B ..如何用最少的代码实现这一点?非常感谢

4 个答案:

答案 0 :(得分:4)

尝试以下方法:

SELECT  ...    
FROM    ...    
WHERE   [A] = @A AND 
        (@B = 0 OR [B] = @B)

答案 1 :(得分:1)

WHERE
   [A] = @A AND [B] = ISNULL(NULLIF(@B, 0), B)

答案 2 :(得分:1)

你可能想尝试这样的事情:

CREATE PROCEDURE MyProcedure
    @A      INT,
    @B      INT
AS
BEGIN
    DECLARE @sql varchar(max)
    DECLARE @whereStat varchar(max)
    IF @B = 0 
       SET @whereStat = 'WHERE [A] = ' + @A
    ELSE
       SET @whereStat = 'WHERE [A] = ' + @A + 'AND [B] = '+ @B 

    SET @sql = 'SELECT  ...

    FROM    ... '+ @whereStat
    exec sp_execsql @sql

END

基本上,您动态创建一个sql字符串并通过系统存储过程执行它。它可能不是最好的方式/最快的方式,但它是另一种选择。 :)

答案 3 :(得分:0)

这是一个丑陋的解决方案,但很简单:

If @B = 0 begin
   ...your sql query without the B = @B
end
else if @B <> 0 begin
   ... your sql query with the B = @B
end