我在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 ..如何用最少的代码实现这一点?非常感谢
答案 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