ALTER proc [dbo].[proc_Leave_Application_GetAvisibleLeaveByUser_LeaveType]
@userID uniqueidentifier,
@leaveType uniqueidentifier ,
@usedLeaves decimal(18,1) output,
@userTotal decimal(18,1) output
as
begin
--跨年--
DECLARE @startDate datetime=convert(datetime,convert(nvarchar,YEAR(GETDATE())*10000+101))
DECLARE @endDate datetime =convert(datetime,convert(nvarchar,YEAR(GETDATE())*10000+1231))
---end----
DECLARE @SQL NVARCHAR(MAX) = N' set @userTotal = (select DefaultDays from Leave_Defaultleave where LeaveType='''+LOWER(convert(nvarchar(36),@leaveType,36))+''' and EmployeeCode = '''+LOWER(convert(nvarchar(36),@userID,36))+ ''' )'
SELECT @SQL += N' if @userTotal = 0'
SELECT @SQL += N' begin set @usedLeaves = 0 end '
SELECT @SQL += N' else if @userTotal is null '
SELECT @SQL += N' begin set @userTotal = 0 set @usedLeaves= 0 end'
SELECT @SQL += N' else begin'
SELECT @SQL += N' set @usedLeaves= (select isnull(SUM(isnull(LeaveDays,0)),0) from Leave_Application where EmployeeCode = '''+LOWER(convert(nvarchar(36),@userID,36))+ ''' '
SELECT @SQL += N' and LeaveType = '''+LOWER(convert(nvarchar(36),@leaveType,36))+''' '
SELECT @SQL += N' and Status in (select id from Master_Status where IsValid=1)'
SELECT @SQL += N' and ApplicationID not in(select ApealApp from Leave_Apeal) '
SELECT @SQL += N' and ApplicationID not in(select NewApp from Leave_Apeal where NewApp is not null))+ (select ISNULL(SUM(isnull(LeaveDays,0)),0) from Leave_Application where EmployeeCode = '''+LOWER(convert(nvarchar(36),@userID,36))+ ''' '
SELECT @SQL += N' and LeaveType = '''+LOWER(convert(nvarchar(36),@leaveType,36))+''' '
SELECT @SQL += N' and Status in (''1E56709C-34FC-418D-A6B5-6EF04DD8D86B'')'
--跨年----
if @LeaveType <>'00000000-0000-0000-0000-000000000000' and @leaveType = '3A30752C-DED9-4A94-AF92-2906A686A321'
SELECT @SQL += N' and YEAR(StartDate)= YEAR('''+convert(nvarchar,@startDate,113)+''') and YEAR(EndDate) =YEAR('''+convert(nvarchar,@endDate,113)+''') '
----END------
SELECT @SQL += N' and (ApplicationID in(select ApealApp from Leave_Apeal) or ApplicationID in(select NewApp from Leave_Apeal where NewApp is not null)) '
SELECT @SQL += N' and ApplicationID not in(select OldApp from Leave_Apeal where OldApp is not null)) '
SELECT @SQL += N' end '
--print @SQL
EXEC sp_executesql @SQL , N' @userTotal decimal(18,1) out , @usedLeaves decimal(18,1) out ' , @userTotal =@userTotal out ,@usedLeaves = @usedLeaves out
print @userTotal print @usedLeaves
end
SQLSERVER-sp_executesql OUT
最新推荐文章于 2022-11-24 15:37:57 发布