【发布时间】:2020-03-22 12:51:51
【问题描述】:
我希望能够在将零传递给存储过程时处理参数。如果参数为零,我们忽略AND 语句。
这是我的程序:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[OrderLoadAllPaged]
@WarehouseId INT = 0,
@CreatedFromUtc DATETIME = NULL,
@CreatedToUtc DATETIME = NULL
AS
BEGIN
DECLARE @sql NVARCHAR(MAX)
SET NOCOUNT ON;
SELECT TOP 100 *
FROM [Test].[dbo].[Order] WITH (NOLOCK)
WHERE
[Deleted] = 0
AND [WarehouseId] = @WarehouseId
AND [CreatedOnUtc] >= ISNULL(@CreatedFromUtc, '1/1/1900')
AND [CreatedOnUtc] < ISNULL(@CreatedToUtc, '1/1/2999')
END
我想要某种条件,仅当仓库 id 大于 0 时才运行这部分查询
AND [WarehouseId] = @WarehouseId
类似:
IF (@WarehouseId > 0)
AND [WarehouseId] = @WarehouseId
我真的需要这个,因为在数据库中有3个仓库,分别是1、2和3。
如果我将它作为零传递,我的查询将失败,因为如果零作为参数传递,我需要返回的所有 3 个仓库都不匹配。
【问题讨论】:
标签: sql sql-server parameters conditional-statements parameter-passing