Вы должны добавить запятые в начале и в конце строки @ProjectId
.
В c#
Как получить значение запятой в начале и в конце
string str = "1,2,5";
string replaced=str.Replace(',',',');
string concatenatdvalue=","+replaced+',';
Result = ", 1,2,5,"
Затем значение результата можно передать как @ProjectId
в SQL Server ......
CREATE PROCEDURE dbo.sp_ProjectReport
(
@FromDate VARCHAR(20)=NULL,
@ToDate VARCHAR(20)=NULL,
@ProjectId VARCHAR(50)=NULL,
@StatusId INT=NULL
)
AS
BEGIN
SELECT
PM.ProjectName
,[PurposeorReason]
,Reg.Name
,EA.Comment as Comment
,[FromDate]
,[VoucherID]
,[TotalAmount]
,ex.CreatedOn
FROM [TimesheetDB].[dbo].[Expense] ex
inner join Registration Reg on reg.RegistrationID = ex.UserID
inner join ProjectMaster PM on ex.ProjectID =PM.ProjectID
inner join AssignedRoles AR on reg.RegistrationID = AR.RegistrationID
inner join ExpenseAuditTB EA on ex.ExpenseID = EA.ExpenseID
where
convert(DATETIME,FromDate) BETWEEN Convert(DATETIME,CASE WHEN isnull(@FromDate,'')='' THEN FromDate ELSE isnull(@FromDate,'') END)
AND Convert(DATETIME, CASE WHEN isnull(@ToDate,'')='' THEN FromDate ELSE isnull(@ToDate,'') END)
and CHARINDEX(','+cast(ea.ProjectID as varchar(100))+',', @ProjectId) > 0
and EA.Status = @StatusId
END
Скрипт тестирования для выполнения SP
EXEC dbo.sp_ProjectReport
@FromDate='2019-09-25',
@ToDate='2019-09-29',
@ProjectId=',1,2,5,',
@StatusId='2'
Примечание: - Здесь я также изменяю логику FromDate на ToDate .........null часть также обрабатывать в пользовательском диапазоне дат .......
Для Eg
Если вы вводите только FromDate как "07/ 06/2017 ", то это даст вам результат (от" 07/07/2017 "до последней даты)