Как преобразовать условие сложного блока в процедуру MSSQL - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть какой-то флажок (Условный фильтр), с помощью которого пользователь может отметить условие фильтра

, например:

CheckBox 1 : OrderNumber
CheckBox 2 : Driver
CheckBox 3 : Code
...

и перейти в хранимую процедуру - что-то вроде этого:

ALTER PROCEDURE [dbo].[DailyBatchSummaryReport_NoGroup]
@FromDatePara Datetime,
@ToDatePara Datetime,
@SeleRecipe nvarchar(max),
@SeleOrder nvarchar(max),
@SeleCustomer nvarchar(max),
@SeleSite nvarchar(max),
@SeleTruck nvarchar(max),
@SeleDriver nvarchar(max),
AS
BEGIN

// Застрял в этой точке

Я хочу написать одну процедуру, которая может обрабатывать несколько случаев выбора пользователя, у меня есть идея со строителем строки и передать в предложение WHERE, но SQLSERVER не принимаетthis (принимает логический параметр)

может кто-нибудь мне помочь.Спасибо тебе.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Может быть, вы можете попробовать что-то вроде этого, где условие: -

Если пользователь установит флажок, тогда передайте соответствующее значение или передайте ноль.

Так что ваше условие где может быть как

Where
(Colname1 = @Paramenter1 or @Paramenter1 is null)
and 
(Colname2 = @Paramenter2 or @Paramenter2 is null)

.... и так далее.

0 голосов
/ 27 февраля 2019

Вы можете использовать его следующим образом:

ALTER PROCEDURE [dbo].[DailyBatchSummaryReport_NoGroup]
@FromDatePara Datetime,
@ToDatePara Datetime,
@SeleRecipe nvarchar(max),
@SeleOrder nvarchar(max),
@SeleCustomer nvarchar(max),
@SeleSite nvarchar(max),
@SeleTruck nvarchar(max),
@SeleDriver nvarchar(max),
AS
BEGIN

Передайте значения @SeleOrder, @SeleCustomer как 0 для непроверенного и 1 для флажка, установленного

select * from
yourtable
where 
OrderNumber= CASE WHEN @SeleOrder = '0' THEN OrderNumber ELSE @SeleOrder END
AND
CUSTOMER= CASE WHEN @SeleCustomer = '0' THEN CUSTOMER ELSE @SeleCustomer END
AND
Driver= CASE WHEN @SeleDriver = '0' THEN Driver ELSE @SeleDriver END

Убедитесь, что вы передаете значение по умолчанию как0. Здесь вы выбрали тип данных как nvarchar (max), поэтому я написал «0», иначе вы можете написать 0, если вы передадите просто значение типа int.или вы можете установить значение по умолчанию как 0

 ALTER PROCEDURE [dbo].[DailyBatchSummaryReport_NoGroup]
    @FromDatePara Datetime,
    @ToDatePara Datetime,
    @SeleRecipe int  = 0,
    @SeleOrder int  = 0,
    @SeleCustomer int  = 0,
    @SeleSite int  = 0,
    @SeleTruck int  = 0,
    @SeleDriver int  = 0,
    AS
    BEGIN

выбрать логику в соответствии с вашим удобством кодирования.но вышеуказанный метод будет работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...