Function in sql server like
Create FUNCTION [dbo].[udfGetTempTable] (@List varchar(4000)) RETURNS @TempTable TABLE ( TempValueInt varchar(500) ) AS BEGIN DECLARE @Value varchar(50), @Pos int, @TempList varchar(4000)
SET @TempList = LTRIM(RTRIM(@List)) + ',' SET @Pos = CHARINDEX(',', @TempList, 1) SET @Value= ''
IF @Pos < 1 BEGIN INSERT @TempTable VALUES(@List) END ELSE BEGIN IF REPLACE(@TempList, ',', '') <> '' BEGIN WHILE @Pos > 0 BEGIN SET @Value = LTRIM(RTRIM(LEFT(@TempList, @Pos - 1))) IF @Value = '' BEGIN BREAK END SET @TempList = RIGHT(@TempList, LEN(@TempList) - @Pos)
INSERT @TempTable VALUES(@Value) SET @Value = '' SET @Pos = CHARINDEX(',', @TempList, 1) END END END Return END
u can call it from sp like
create proc dbo.spTemp ( @ClientId INT, @fdate SmallDateTime, @tdate SmallDateTime, @JobStatus varchar(4000), @Category varchar(4000) -- @HandOverDetailsCategory Varchar(100) ) as
SELECT isnull(M_Client.Client_Name_System,'') as ClientName , isnull(Job.Job_Name,'') as JobName, IsNull(Convert(varchar(10),Job.Job_Date, 103),'') As [Prealert Date], isnull(Cast(Job.Job_Id As Varchar(50)),'')as [Citiflow Ref], isnull(Cast(Job.Client_JobReference As Varchar(50)),'')as [Client Job Ref], IsNull(Cast(HandOverDetails.No_Of_Rec as varchar(10)),'') As [No of Records], IsNull(HandOverDetails.Rack_Loc,'') As [Rack Loc.], IsNull(Convert(varchar(10),Job.Job_Created_date, 103),'') As [Due Date], isnull(M_Printer.Printer_Name ,'-')as PrinterName, IsNull(Job.Job_Instructions ,'') As [Special Instruction], M_Login_2.UserName AS [CS Handled By], HandOverDetails.Operations_Comments AS [Operations Comments], isnull(Job.Job_Status,'') As [Signed off on Citiflow], M_Login_1.UserName AS [Cmpltd Job Bag Signed Off], Category = CASE HandOverDetails.Category when 'Not in Handover' then NULL else HandOverDetails.Category end FROM M_Login M_Login_1 INNER JOIN Job_SignOff ON M_Login_1.Login_ID = Job_SignOff.Login_Id RIGHT OUTER JOIN M_Login M_Login_2 INNER JOIN M_Client INNER JOIN Job ON M_Client.Client_Id = Job.Client_Id ON M_Login_2.Login_ID = Job.Login_Id ON Job_SignOff.Job_Id = Job.Job_Id LEFT OUTER JOIN M_Printer INNER JOIN Job_Insert ON M_Printer.Printer_Id = Job_Insert.Printer_Id ON Job.Job_Id = Job_Insert.Job_Id LEFT OUTER JOIN HandOverDetails ON Job.Job_Id = HandOverDetails.Job_Id where Job.Job_Date >= @fdate and Job.Job_Date < Dateadd(day,1,@tdate) And Job.Client_Id = @ClientId And Job.Job_Status in ( select * from dbo.udfGetTempTable(@JobStatus)) And HandOverDetails.Category in ( select * from dbo.udfGetTempTable(@Category)) Order By Category ,ClientName ,[Prealert Date] END
|