2016-02-22 5 views
-2
DECLARE @x nvarchar(max) 
DECLARE @Employee bigint 
DECLARE @StartDate date 
DECLARE @EndDate date 

SET @x = 'Select Distinct Att.Status 
       ,ED.StartDate 
       ,ED.EndDate 
       ,u.FirstName 
       ,u.Department 
       ,ED.LeaveDays 
from EmployeeLeaveDetails ED 
JOIN Employee e     on ED.Employee = e.Employee 
           and ED.IsDeleted = 0 
           and e.IsDeleted = 0 
JOIN Attendance a    on e.Employee = a.Employee 
LEFT JOIN AttendanceStatus Att on CAST(a.Status as nvarchar) = Att.Status 
           and a.IsDeleted = 0 
           and Att.IsDeleted = 0 
           and Att.IsVacation = 1 
JOIN Users u     on e.Users = u.Users 
           and u.IsDeleted = 0 
Where ED.Employee = ' +CAST(293 as nvarchar)+ ' 
           and ED.StartDate = '+CAST('2016-01-01' as nvarchar)+' 
           and ED.EndDate ='+CAST('2016-01-04' as nvarchar)+' 
group by Att.Status 
     ,ED.StartDate 
     ,ED.EndDate 
     ,u.FirstName 
     ,u.Department 
     ,ED.LeaveDays' 
+0

это мой задний конец codeI я не смог брось его, каждый раз, когда он дает мне «тип Операнд столкновение: дата несовместима с межд» эту ошибку ... Пожалуйста, помогите – Mac

+0

я есть Newto переполнению стека, пожалуйста, простите меня – Mac

+0

Вы можете разместить структуру таблицы для таблиц, которые вы использовали в этом запросе? –

ответ

0

Я думаю, что эти линии являются источником ошибки:

and ED.StartDate = '+CAST('2016-01-01' as nvarchar)+' 
and ED.EndDate ='+CAST('2016-01-04' as nvarchar)+' 

В конечном значении @x, который выполнен в виде SQL, он станет

and ED.StartDate = 2016-01-01 
and ED.EndDate = 2016-01-04 

2016-01-01 выглядит как дата для нас, людей, но SQL Server видит (рассчитанное) целое число: 2014 (2016 минус 1 минус 1). Округлые даты с кавычками (исключено CAST, потому что я не понимаю, почему вы должны использовать строку даты для nvarchar).

and ED.StartDate = ''2016-01-01''' +' 
and ED.EndDate =''2016-01-04''' +' 
+0

спасибо, что это сработало :) – Mac

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