SQl服务器拆分功能和存储过程用于管道分离和非管道分离的下拉值

时间:2015-05-26 08:45:50

标签: asp.net sql-server stored-procedures drop-down-menu split

我需要拆分管道分隔值,这些值是我从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;

如果您需要更清晰和更多信息,请与我们联系。

0 个答案:

没有答案