2013-12-07 3 views
0

У меня есть таблица EmployeeAttendance и Users, и когда я пытаюсь получить записи с использованием приведенного ниже запроса и передавая значение null параметру @userName, он не возвращает никаких записей ... там может быть какая-то проблема в запросе ...Сохраненная процедура Не ​​возвращает требуемый результат

может ли один помочь мне в этом

declare @month int =12, 
@year int=1, 
@orgID int=1, 
@userName nvarchar(100) = null; 

DECLARE @lastDay int; 

-- calculations 
DECLARE @startDate datetime, @endDate datetime 
SET @startDate = convert(varchar, @year) + '-' + convert(varchar, @month) + '-1' 
set @endDate = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@startDate)+1,0)) 
set @lastDay = day(@endDate) --last day of month 

declare @day int 
set @day = 2 


declare @days varchar(max) 
set @days = '[1]' 
WHILE (@day <= @lastDay) 
BEGIN 
    set @days = @days + ',[' + convert(varchar, @day) + ']' 
    set @day = @day + 1 
END 

declare @query varchar(max) 

set @query = ' 
SELECT USerID,Name,' + @days + 
' 
FROM 
(

SELECT u.ID as UserID, u.FirstName + '' ''' + ' ' + ' + u.LastName as Name, InTime,Outtime,isPresent, day(Date) as day FROM users u 
LEFT join EmployeeAttendance e on e.USerID = u.ID AND [Date] between '''+ cast(@startDate as varchar)+' '' and '''+ cast(@endDate as varchar)+' '' 
left join Employee emp on emp.UserID= u.ID 

where emp.OrganisationID =' +cast(@orgID as varchar)+' 

and(u.UserName like ''%'[email protected]+ '%'' OR '''[email protected]+''' IS NULL) 

) AS SourceTable 
PIVOT 
(
MAX(InTime) 
FOR day IN (' + @days + ')' + ' 
) AS PivotTable 


;' 

print @query; 

exec(@query); 





GO 

И когда я передать @Username с некоторой конкретной строки, то она возвращает правильные результаты, но если я передать нуль значение для @userName, то оно возвращает ничего.

Так что, когда я передаю значение null @userName, он возвращает все результаты.

+0

если вы useid равно нуль, то, что ваши принятые результаты? пожалуйста, что вы пытаетесь достичь и что вы сделали до сих пор? – Hiten004

+0

, если мое имя пользователя равно null, тогда я хочу, чтобы все результаты и если есть какое-то значение в @ userName, то я уже получаю записи из вышеуказанного запроса. –

+0

. Пожалуйста, обновите свой вопрос с принятыми результатами? – Hiten004

ответ

1

О да. Существует проблема. Если вы объявите null в строку, вся строка будет равна null. 'а' + нуль = нулевого

Dont объявить его обнулить

@userName nvarchar(100) = ''; 

И изменить

(u.UserName like ''%'[email protected]+ '%'' OR '''[email protected]+''' ='''') 
+0

PeterRing Большое спасибо –

Смежные вопросы