select当datetime参数(@StartDate&@EndDate)在此存储过程中是可选的时,如何在SQL Server中编写此查询?
CREATE PROCEDURE [dbo].[prSearchEmployees]
(
@Id INT = NULL
,@FullName VARCHAR(20) = NULL
,@Age INT = NULL
,@StartDate = NULL
,@EndDate = NULL
)
AS
BEGIN
SELECT *
FROM Employee
WHERE Id = ISNULL(@Id, Id)
AND FullName LIKE ISNULL(@FullName + '%', FullName)
AND Age = ISNULL(@Age, Age)
END
Run Code Online (Sandbox Code Playgroud)
Sam*_*Sam 12
您可以在您的sproc顶部添加两个新变量.并根据ISNULL函数进行分配
CREATE PROCEDURE [dbo].[prSearchEmployees]
(
@Id INT = NULL
,@FullName VARCHAR(20) = NULL
,@Age INT = NULL
,@StartDate DATETIME = NULL
,@EndDate DATETIME = NULL
)
AS
BEGIN
DECLARE @SDate DATETIME
DECLARE @EDate DATETIME
SET @SDate = ISNULL(@StartDate, GETDATE())
SET @EDate = ISNULL(@EndDate, GETDATE())
SELECT * FROM Employee
WHERE Id = ISNULL(@Id, Id)
AND FullName LIKE ISNULL(@FullName + '%', FullName)
AND Age = ISNULL(@Age, Age)
AND Date BETWEEN @SDate AND @EDate
Run Code Online (Sandbox Code Playgroud)
小智 6
我知道这是一个古老的帖子,但有一些选择更简洁.这篇文章完美地概括了它.所以在前面的例子中你会做类似的事情
CREATE PROCEDURE [dbo].[prSearchEmployees]
(
@Id INT = NULL
,@FullName VARCHAR(20) = NULL
,@Age INT = NULL
,@StartDate DATETIME = NULL
,@EndDate DATETIME = NULL
)
AS
BEGIN
SELECT * FROM Employee
WHERE ((@Id IS NULL) OR (Id = @Id))
AND ((@FullName IS NULL) OR (FullName LIKE @FullName + '%'))
AND ((@Age IS NULL) OR (Age = @Age))
AND ((@SDate IS NULL) OR (Date BETWEEN @SDate AND @EDate))
Run Code Online (Sandbox Code Playgroud)
小智 5
AND(
((NullIf(@begin, '') IS NULL) OR CAST(ColumnDate AS DATE) >= @begin)
AND ((NullIf(@end, '') IS NULL) OR CAST(ColumnDate AS DATE) <= @end)
)
Run Code Online (Sandbox Code Playgroud)
涵盖所有选项、空值、空白和比较。
| 归档时间: |
|
| 查看次数: |
49984 次 |
| 最近记录: |