Sql server SQL Server条件选择取决于输入参数
我在MS SQL中有一个存储过程,它接受2个参数,例如Sql server SQL Server条件选择取决于输入参数,sql-server,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。。如何用最少的代码实现这一点?非常感谢请尝试以下操作: SELEC
CREATE PROCEDURE MyProcedure
@A INT,
@B INT
AS
BEGIN
SELECT ...
FROM ...
WHERE [A] = @A AND [B] = @B
END
我的问题是。如果我有@B=0,我希望在选择行中像这样[A]=@A,而不是[B]=@B。。如何用最少的代码实现这一点?非常感谢请尝试以下操作:
SELECT ...
FROM ...
WHERE [A] = @A AND
(@B = 0 OR [B] = @B)
这是一个丑陋的解决方案,但很简单:
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
如果@B=0开始
…不带B=@B的sql查询
结束
否则如果@b0开始
... 使用B=@B的sql查询
结束
您可能想尝试以下方法:
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字符串,并通过系统存储过程执行它。这可能不是最好的方法/最快的方法,但它是另一种选择。:) 我认为只有这一点才能完全回答最初的问题。这样,您就可以真正排除where子句中不需要的参数。
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