如果传递零,SQL参数化存储过程将跳过

问题描述 投票:0回答:3

因此,我希望能够在将零传递给存储过程时处理参数。因此,如果参数为零,我们将忽略AND语句。

这是我的程序:

USE [Test]
GO
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

我想要某种条件,仅当仓库编号大于0 AND [WarehouseId] = @WarehouseId时才运行查询的这一部分>

类似:

IF (@WarehouseId > 0)
    AND [WarehouseId] = @WarehouseId

我真的很需要这个,因为在数据库中有3个仓库,分别是ID 1、2和3。如果我将其传递为零,则查询将失败,因为如果将零作为参数传递,则它将与我需要返回的所有3个仓库都不匹配。

因此,我希望能够在将零传递给存储过程时处理参数。因此,如果参数为零,我们将忽略AND语句。这是我的过程:USE [Test] GO SET ...

sql sql-server parameters conditional-statements parameter-passing
3个回答
2
投票

您可以添加案例说明


1
投票

我认为您想要:


1
投票

另一个选择是最大化使用sqlserver iif函数

© www.soinside.com 2019 - 2024. All rights reserved.