我需要拆分管道分隔值,这些值是我从aspx.cs
下拉列表中获得的。那些下拉列表会将值传递给存储过程,其中我编写了split函数以将这些管道分隔的字符串吐出为逗号分隔值。
它适用于管道分离值,但是如果我传递单个值(没有用管道分隔),它就无法正常工作。我希望对管道分离和非分离值都这样做。
存储过程:
ALTER PROCEDURE [dbo].[PROC_RPT_HOSTLISTINGREISSUANCECOMBINED]
@i_STARTDATE VARCHAR(20),
@i_ENDDATE VARCHAR(20),
@i_REQUESTTYPE VARCHAR(50),
@i_AGENTID VARCHAR(20),
@i_VALIDATIONTYPE VARCHAR(50),
@i_STATUS VARCHAR(20)
AS
BEGIN
SET NOCOUNT ON;
SELECT A.Cust_ID AS [Cust_ID]
,A.Card_Holder_Name AS [Card_Holder_Name]
,A.Request_Time AS [Request_Time]
,convert(varchar,A.Request_Date,103) AS [Request_Date]
,A.Request_Type AS [Request_Type]
,A.Account_Number AS [Account_Number]
,A.Name as [Name]
,A.Relation AS [Relation]
,A.Telephone AS [Telephone]
,A.Reason AS [Reason]
,A.Destination AS [Destination]
,A.Branch_Code AS [Branch_Code]
,A.Branch_Name AS [Branch_Name]
,A.Charges AS [Charges]
,A.Remarks AS [Remarks]
,A.CardNo AS [CardNo]
,A.PBand as [PBand]
,A.ReviewerId As[ModifiedBy]
,dbo.UST_GetMandatoryChecksHotListings(A.HLID,'Mother''s Maiden Name') as Mother_Maiden_Name
,dbo.UST_GetMandatoryChecksHotListings(A.HLID,'DOB') as DOB
,dbo.UST_GetMandatoryChecksHotListings(A.HLID,'Last 2 Transactions') as Last2_Transactions
,dbo.UST_GetMandatoryChecksHotListings(A.HLID,'Phone or Fax') as Phone_or_Fax
,dbo.UST_GetMandatoryChecksHotListings(A.HLID,'Email') as Email
,dbo.UST_GetMandatoryChecksHotListings(A.HLID,'Address') as Address
,dbo.UST_GetMandatoryChecksHotListings(A.HLID,'Joint Applicant') as Joint_Applicant
,dbo.UST_GetMandatoryChecksHotListings(A.HLID,'Super Saver') as Super_Saver
,dbo.UST_GetMandatoryChecksHotListings(A.HLID,'Sweep In') as Sweep_In
,dbo.UST_GetMandatoryChecksHotListings(A.HLID,'Nominee') as Nominee
,A.AgentId AS [AgentId]
,A.AccountDebited AS AccountDebited
,A.ReissuanceRequested AS [ReissuanceRequested]
,B.Request_Time AS [Request_Time_Flag]
,B.Request_Type AS [Request_Type_Flag]
,B.Reason AS [Reason_Flag]
,B.Destination AS [Destination_Flag]
,B.Branch_Code AS [Branch_Code_Flag]
,B.Branch_Name AS [Branch_Name_Flag]
,B.Charges AS [Charges_Flag]
,B.Remarks AS [Remarks_Flag]
,dbo.UST_GetChangedMandatoryCheckList(B.New_MadatoryList,'Mother''s Maiden Name') as Mother_Maiden_Name_Changed_Flag
,dbo.UST_GetChangedMandatoryCheckList(B.New_MadatoryList,'DOB') as DOB_Changed_Flag
,dbo.UST_GetChangedMandatoryCheckList(B.New_MadatoryList,'Last 2 Transactions') as Last2_Transactions_Changed_Flag
,dbo.UST_GetChangedMandatoryCheckList(B.New_MadatoryList,'Phone or Fax') as Phone_or_Fax_Changed_Flag
,dbo.UST_GetChangedMandatoryCheckList(B.New_MadatoryList,'Email') as Email_Changed_Flag
,dbo.UST_GetChangedMandatoryCheckList(B.New_MadatoryList,'Address') as Address_Flag
,dbo.UST_GetChangedMandatoryCheckList(B.New_MadatoryList,'Joint Applicant') as Joint_Applicant_Changed_Flag
,dbo.UST_GetChangedMandatoryCheckList(B.New_MadatoryList,'Super Saver') as Super_Saver_Changed_Flag
,dbo.UST_GetChangedMandatoryCheckList(B.New_MadatoryList,'Sweep In') as Sweep_In_Changed_Flag
,dbo.UST_GetChangedMandatoryCheckList(B.New_MadatoryList,'Nominee') as Nominee_Changed_Flag
,a.Reference_Number
,convert(varchar,a.HotListSystemDate,103) + ' ' + convert(varchar,a.HotListSystemDate,108) as [HotListSystemDate]
,HotListSystemDate as [sdt]
FROM TBL_HOT_LISTINGS A with(nolock) LEFT OUTER JOIN
TBL_HOST_LISTINGS_UpdatedStatus B with(nolock) ON A.HLID = B.HLID
WHERE
A.Request_Type in (select * from [dbo].[fnSplit](@i_REQUESTTYPE,'|')) AND
A.AgentId LIKE case when @i_AGENTID = 'ALL' then A.AgentId ELSE @i_AGENTID END
AND
A.Approved = case when @i_STATUS='A' then A.Approved else @i_STATUS end
AND
A.ValidationDesc=Case when @i_VALIDATIONTYPE='ALL' then A.ValidationDesc else @i_VALIDATIONTYPE end
AND
convert(smalldatetime,convert(varchar,Request_Date,103),103)
BETWEEN
convert(smalldatetime,convert(varchar,@i_STARTDATE,103),103) AND
convert(smalldatetime,convert(varchar, @i_ENDDATE,103),103)
order by sdt
END
分割功能:
ALTER FUNCTION [dbo].[fnSplit](
@sInputList VARCHAR(8000) -- List of delimited items
, @sDelimiter VARCHAR(8) = ',' -- delimiter that separates items
) RETURNS @List TABLE (item VARCHAR(8000))
BEGIN
DECLARE @sItem VARCHAR(8000)
WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0
BEGIN
SELECT
@sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))),
@sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList))))
IF LEN(@sItem) > 0
INSERT INTO @List SELECT @sItem
END
IF LEN(@sInputList) > 0
INSERT INTO @List SELECT @sInputList -- Put the last item in
RETURN
END
Aspx.cs页面下拉值:
case ReportNames.GeneralReports.ATM_CARD_HOTLISTING_REISSUANCE_COMBINED_REPORT:
TRAgentID.Visible = true;
TRRequestType.Visible = true;
ddlRequestType.Items.Clear();
ddlRequestType.Items.Add(new ListItem("ALL", "ALL"));
ddlRequestType.Items.Add(new ListItem("HOT-LISTING", "HOT-LISTING"));
ddlRequestType.Items.Add(new ListItem("REISSUANCE", "REISSUANCE"));
ddlRequestType.Items.Add(new ListItem("HOT-LISTING AND REISSUANCE", "HOT-LISTING AND REISSUANCE"));
ddlRequestType.Items.Add(new ListItem("COMBINED REPORT OF “REISSUE CARD” & “HOTLIST & REISSUE CARD”", "REISSUE CARD|HOTLIST & REISSUE CARD"));
ddlRequestType.Items.Add(new ListItem("COMBINED REPORT OF “HOTLIST CARD” & “HOTLIST & REISSUE CARD”", "HOTLIST CARD|HOTLIST & REISSUE CARD"));
ddlRequestType.Items.Add(new ListItem("COMBINED REPORT OF “REISSUE PREPAID CARD” & “HOTLIST & REISSUE PREPAID CARD”", "REISSUE PREPAID CARD|HOTLIST & REISSUE PREPAID CARD"));
ddlRequestType.Items.Add(new ListItem("COMBINED REPORT OF “HOTLIST PREPAID CARD” & “HOTLIST & REISSUE PREPAID CARD”", "HOTLIST PREPAID CARD|HOTLIST & REISSUE PREPAID CARD"));
ddlRequestType.Items.Add(new ListItem("COMBINED REPORT (ALL ABOVE MENTIONED 4 REQUEST TYPES)", "REISSUE CARD|HOTLIST & REISSUE CARD|HOTLIST CARD|REISSUE PREPAID CARD|HOTLIST & REISSUE PREPAID CARD|HOTLIST PREPAID CARD"));
ddlRequestType.Items.FindByValue("ALL").Selected = true;
TRValidationType.Visible = true;
TRRequestStatus.Visible = true;
TRComplaintStatus.Visible = false;
TRTransactionType.Visible = false;
TRLeadProducts.Visible = false;
TRRequestStatus.Visible = true;
TRCallTypePanel.Visible = false;
TRSMSRequestName.Visible = false;
TRSMSStatus.Visible = false;
FillValidationTypes();
FillAgentIDs();
break;
如果您需要更清晰和更多信息,请与我们联系。