【发布时间】:2014-10-20 18:19:20
【问题描述】:
CREATE PROCEDURE [dbo].[SPPeople]
(
@Name varchar(50) = null,
@Status1 char(1) = '0',
@Status2 char(1) = '0',
@Status3 char(1) = '0'
)
as
SELECT
People.Name, People.Age
FROM
People
WHERE
(People.Name = CASE WHEN @Name is null THEN People.Name ELSE @Name END)
AND
((People.Status1 = CASE WHEN @Status1 = '0' THEN People.Status1 ELSE @Status1 END)
OR
(People.Status2 = CASE WHEN @Status2 = '0' THEN People.Status2 ELSE @Status2 END)
OR
(People.Status3 = CASE WHEN @Status3 = '0' THEN People.Status3 ELSE @Status3 END))
如果参数@Status1 和@Status2 等于1,则查询应返回必须具有Status1 或Status2 等于1 的寄存器,而不依赖于Status3。
但是当我将@Status1 和@Status2 作为1 传递时,上面的查询会返回所有寄存器。
【问题讨论】:
-
这个查询是否执行?在最后一行(Status2 和 Status3 之间)之前似乎缺少布尔条件
-
真的不见了。我添加了“或”以便它执行。
标签: sql sql-server stored-procedures parameters where