У меня есть выпадающий список со следующими параметрами:
<asp:DropDownList ID="ddlTaxStatus" runat="server" OnPreRender="ddlContainerStatus_PreRender">
<asp:ListItem Text="--Select--" Value="-1"></asp:ListItem>
<asp:ListItem Value="" Text="'' - Not closed"></asp:ListItem>
<asp:ListItem Value="R" Text="R - Ready to pay"></asp:ListItem>
<asp:ListItem Value="X" Text="X - Paid"></asp:ListItem>
<asp:ListItem Value="C" Text="C - Cancel"></asp:ListItem>
<asp:ListItem Value="O" Text="O - Original"></asp:ListItem>
<asp:ListItem Value="D" Text="D - Delete"></asp:ListItem>
</asp:DropDownList>
В зависимости от выбранной пользователем опции, я отправляю выбранную опцию для поиска в моей базе данных и извлекаю записи, которые имеют выбранное значение в соответствующем поле. Мой Sql usp выглядит так:
ALTER PROCEDURE [dbo].[uspGetContainerSummaryRecordsForSearch] (
@fkJobID varchar(8),
@csmTaxStatus varchar(3)
)
AS
BEGIN
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
SET NOCOUNT ON;
SELECT fkJobID,
csmContainerID,
csmDisplayContainerID,
csmTaxStatus
FROM ContainerSummaryRecord
where fkJobID = @fkJobID
AND ( @csmTaxStatus IS NULL
OR csmTaxStatus = @csmTaxStatus )
END
Теперь мой вопрос: когда пользователь выбирает опцию с Value = "" и Text = "'' - Not closed", я не получаю желаемого результата. Это потому, что значение = "" на самом деле хранится как ноль в БД.
В запросе я сравниваю входной параметр в предложении где, как это @csmTaxStatus IS NULL
потому что если пользователь не выбрал ни одного параметра, означающего Text = "- Select--" Value = "- 1", то фильтр не применяется, и все результаты возвращаются (и это желаемое поведение для этого параметра). Но это конфликтует с Value = "", который хранится как ноль в БД. Пожалуйста, помогите.