将存储过程数据插入临时 table 无效
Insert stored procedure data into temp table not working
我创建了一个带有 3 个参数的存储过程。见下文
ALTER PROCEDURE [dbo].[Leave_Allocation_Mar_2016]
@Type nvarchar(10),
@Month int,
@Year int
AS
BEGIN
declare @emp_card_no numeric(9)
declare @emp_name varchar(20)
declare @dt_of_join datetime
declare @Total_days numeric(5,2)
declare @Days_worked numeric(5,2)
declare @Final_PaidDayLop numeric(5,2)
declare @TotalRecord int
declare @actualMonth int
declare @actualYear int
declare @actuallastdate varchar(20)
IF(@Type = 'C')
BEGIN
Print 'Yes I am in the Current process';
DECLARE daily_Allocate CURSOR FOR
Select distinct c.emp_card_no, c.emp_name, c.Dt_Of_Join from emp_mst c
join emp_mon_day d
on c.emp_card_no=d.emp_mkey
WHERE Dt_Of_Join = CAST(FLOOR(CAST( DATEADD(month, -6, GETDATE()) AS FLOAT ))AS DATETIME)
OPEN daily_Allocate
FETCH NEXT FROM daily_Allocate INTO
@emp_card_no, @emp_name, @Dt_Of_Join
WHILE @@FETCH_STATUS = 0
BEGIN
select @Total_days = Sum(total_day),@Days_worked = Sum(days_worked)
from emp_mon_day a
where a.emp_mkey = 2519
group by emp_mkey
PRINT 'Employee Card no = ' + cast(@emp_card_no as char)
PRINT 'Total days = ' + cast(@Total_days as char)
PRINT 'Days Worked = ' + cast(@Days_worked as char)
set @Final_PaidDayLop = 0;
set @TotalRecord = 0;
Select @Final_PaidDayLop =
isnull(sum(days),0)
from P_Emp_Del_App_Hdr c join P_Emp_Del_App_trl d on c.mkey=d.mkey
where c.delete_flag='N' and app_flag='Y' and c.year = @actualYear
and c.emp_mkey = @emp_card_no
Select @TotalRecord = ((1.75 * 6) / @Total_days) * (@Days_worked + @Final_PaidDayLop)
from emp_mon_day a where a.emp_mkey = @emp_card_no group by a.emp_mkey
PRINT 'Final Paid LOP ' + cast(coalesce(@Final_PaidDayLop,0) as char)
PRINT 'Total Record ' + cast(coalesce(@TotalRecord,0) as char)
FETCH NEXT FROM daily_Allocate INTO
@emp_card_no, @emp_name, @Dt_Of_Join
END
CLOSE daily_Allocate
DEALLOCATE daily_Allocate
END END
输出如下
Now what I want is, I want to insert the above data into the temp table.
我试过如下
CREATE TABLE #tmp1111
(
Sr_no int identity(1,1),
Current_Status nvarchar(255),
Emp_card_no int,
Total_days int,
days_worked int,
final_lop_paid int,
total_record int
)
首先我创建了一个临时文件 table 并尝试插入如下数据
INSERT INTO #tmp1111 exec Leave_Allocation_Mar_2016 'C', '2', '2016'
它执行成功但是当我运行 select 语句时临时 table.
中没有记录
我正在使用 SQL 服务器 2005
不是打印值,而是将其存储在局部变量中(或插入到 table 变量中)并从存储过程中 return 它,然后它将起作用
例如:-
BEGIN
....
DECLARE @v_str AS NVARCHAR(500)
SET @v_str = ''
...
SELECT @v_str = @v_str+'Yes I am in the Current process'
...
SELECT @v_str = @v_str+'Total Records'
.
.
SELECT @v_str AS result
END
您的存储过程没有直接输出,仅打印变量。您需要 return 您想要的值,例如在 table:
请注意,table 是必需的,而不仅仅是 returning 变量,因为您的光标中可能有多个循环
ALTER PROCEDURE [dbo].[Leave_Allocation_Mar_2016]
@Type nvarchar(10),
@Month int,
@Year int
AS
BEGIN
DECLARE @Results TABLE (
Emp_card_no NUMERIC(9),
Total_days NUMERIC(5,2),
Days_worked NUMERIC(5,2),
Final_PaidDayLop numeric(5,2)
TotalRecord int
)
declare @emp_card_no numeric(9)
declare @emp_name varchar(20)
declare @dt_of_join datetime
declare @Total_days numeric(5,2)
declare @Days_worked numeric(5,2)
declare @Final_PaidDayLop numeric(5,2)
declare @TotalRecord int
declare @actualMonth int
declare @actualYear int
declare @actuallastdate varchar(20)
IF(@Type = 'C')
BEGIN
Print 'Yes I am in the Current process';
DECLARE daily_Allocate CURSOR FOR
Select distinct c.emp_card_no, c.emp_name, c.Dt_Of_Join from emp_mst c
join emp_mon_day d
on c.emp_card_no=d.emp_mkey
WHERE Dt_Of_Join = CAST(FLOOR(CAST( DATEADD(month, -6, GETDATE()) AS FLOAT ))AS DATETIME)
OPEN daily_Allocate
FETCH NEXT FROM daily_Allocate INTO
@emp_card_no, @emp_name, @Dt_Of_Join
WHILE @@FETCH_STATUS = 0
BEGIN
select @Total_days = Sum(total_day),@Days_worked = Sum(days_worked)
from emp_mon_day a
where a.emp_mkey = 2519
group by emp_mkey
PRINT 'Employee Card no = ' + cast(@emp_card_no as char)
PRINT 'Total days = ' + cast(@Total_days as char)
PRINT 'Days Worked = ' + cast(@Days_worked as char)
set @Final_PaidDayLop = 0;
set @TotalRecord = 0;
Select @Final_PaidDayLop =
isnull(sum(days),0)
from P_Emp_Del_App_Hdr c join P_Emp_Del_App_trl d on c.mkey=d.mkey
where c.delete_flag='N' and app_flag='Y' and c.year = @actualYear
and c.emp_mkey = @emp_card_no
Select @TotalRecord = ((1.75 * 6) / @Total_days) * (@Days_worked + @Final_PaidDayLop)
from emp_mon_day a where a.emp_mkey = @emp_card_no group by a.emp_mkey
PRINT 'Final Paid LOP ' + cast(coalesce(@Final_PaidDayLop,0) as char)
PRINT 'Total Record ' + cast(coalesce(@TotalRecord,0) as char)
INSERT INTO @Results
( Emp_card_no ,
Total_days ,
Days_worked ,
Final_PaidDayLop
)
VALUES ( @emp_card_no , -- Emp_card_no - numeric
@Total_days , -- Total_days - numeric
@Days_worked , -- Days_worked - numeric
@Final_PaidDayLop -- Final_PaidDayLop - numeric
)
FETCH NEXT FROM daily_Allocate INTO
@emp_card_no, @emp_name, @Dt_Of_Join
END
CLOSE daily_Allocate
DEALLOCATE daily_Allocate
SELECT 'Yes I am in the Current process', *
FROM @Results
END
END
我还建议整理变量命名的格式和一致性,以便更容易手动解析。一些错误处理以确保您的游标也始终关闭会很有用。
还建议将光标声明为 FAST_FORWARD、READ_ONLY:
What is the advantage of using FAST_FORWARD for defining a cursor?
而不是@Result table 变量使用如下:
CREATE TABLE #Results
(
Emp_card_no NUMERIC(9),
Total_days NUMERIC(5,2),
Days_worked NUMERIC(5,2),
Final_PaidDayLop NUMERIC(5,2),
TotalRecord INT
)
INSERT INTO #Results
(
Emp_card_no,
Total_days,
Days_worked,
Final_PaidDayLop
)
VALUES
(
@emp_card_no , -- Emp_card_no - numeric
@Total_days , -- Total_days - numeric
@Days_worked , -- Days_worked - numeric
@Final_PaidDayLop -- Final_PaidDayLop - numeric
)
在 DEALLOCATE daily_Allocate 之后插入下面的语句
SELECT * FROM #Results
DROP TABLE #Results
This select statement returns all rows which records are inserted in #Results temp table while executing cursor
进行这些更改,希望这对您有所帮助
更新:
ALTER PROCEDURE [dbo].[Leave_Allocation_Mar_2016]
@Type NVARCHAR(10),
@Month INT,
@Year INT
AS
BEGIN
SET NOCOUNT ON;
CREATE TABLE #Results
(
Emp_card_no NUMERIC(9),
Total_days NUMERIC(5,2),
Days_worked NUMERIC(5,2),
Final_PaidDayLop NUMERIC(5,2),
TotalRecord INT
)
DECLARE @emp_card_no NUMERIC(9)
DECLARE @emp_name VARCHAR(20)
DECLARE @dt_of_join DATETIME
DECLARE @Total_days NUMERIC(5,2)
DECLARE @Days_worked NUMERIC(5,2)
DECLARE @Final_PaidDayLop NUMERIC(5,2)
DECLARE @TotalRecord INT
DECLARE @actualMonth INT
DECLARE @actualYear INT
DECLARE @actuallastdate VARCHAR(20)
IF(@Type = 'C')
BEGIN
PRINT 'Yes I am in the Current process';
DECLARE daily_Allocate CURSOR
LOCAL SCROLL STATIC
FOR
SELECT DISTINCT c.emp_card_no, c.emp_name, c.Dt_Of_Join FROM emp_mst c
JOIN emp_mon_day d ON c.emp_card_no=d.emp_mkey
WHERE Dt_Of_Join =
CAST(FLOOR(CAST( DATEADD(month, -6, GETDATE()) AS FLOAT)) AS DATETIME)
OPEN daily_Allocate
FETCH NEXT FROM daily_Allocate INTO @emp_card_no, @emp_name, @Dt_Of_Join
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @Total_days = SUM(total_day), @Days_worked = SUM(days_worked)
FROM emp_mon_day a
WHERE a.emp_mkey = 2519
GROUP BY emp_mkey
PRINT 'Employee Card no = ' + cast(@emp_card_no AS CHAR)
PRINT 'Total days = ' + cast(@Total_days AS CHAR)
PRINT 'Days Worked = ' + cast(@Days_worked AS CHAR)
SET @Final_PaidDayLop = 0;
SET @TotalRecord = 0;
SELECT @Final_PaidDayLop = ISNULL(SUM(days), 0)
FROM P_Emp_Del_App_Hdr c JOIN P_Emp_Del_App_trl d ON c.mkey=d.mkey
WHERE c.delete_flag='N' AND app_flag='Y' AND c.year = @actualYear
AND c.emp_mkey = @emp_card_no
SELECT
@TotalRecord = ((1.75 * 6) / @Total_days) * (@Days_worked + @Final_PaidDayLop)
FROM emp_mon_day a
WHERE a.emp_mkey = @emp_card_no
GROUP BY a.emp_mkey
PRINT 'Final Paid LOP ' + CAST(COALESCE(@Final_PaidDayLop, 0) AS CHAR)
PRINT 'Total Record ' + CAST(COALESCE(@TotalRecord, 0) AS CHAR)
INSERT INTO #Results
(
Emp_card_no,
Total_days,
Days_worked,
Final_PaidDayLop
)
VALUES
(
@emp_card_no , -- Emp_card_no - numeric
@Total_days , -- Total_days - numeric
@Days_worked , -- Days_worked - numeric
@Final_PaidDayLop -- Final_PaidDayLop - numeric
)
FETCH NEXT FROM daily_Allocate INTO @emp_card_no, @emp_name, @Dt_Of_Join
END
CLOSE daily_Allocate
DEALLOCATE daily_Allocate
SELECT * FROM #Results
DROP TABLE #Results
END
END
然后EXEC Leave_Allocation_Mar_2016 'C', '2', '2016'
你会在table输出中得到结果
试试这个而不是光标:
declare @dt_of_join date
set @dt_of_join = DATEADD(month, -6, GETDATE())
Select
c.emp_card_no, c.emp_name,
(1.75 * 6) / NullIf(d.Total_days, 0)) * (IsNull(d.Days_worked, 0) + IsNull(p.Final_PaidDayLop, 0)) as TotalRecord
from dbo.emp_mst c
outer apply
(
select
sum(d.total_day) as total_days
sum(d.days_worker) as days_worker
from dbo.emp_mon_day d
WHERE d.emp_mkey = c.emp_card_no
GROUP BY d.emp_mkey
) d
outer apply
(
select sum(cc.days) as Final_PaidDayLop
from P_Emp_Del_App_Hdr cc
inner join P_Emp_Del_App_trl dd on cc.mkey=d.mkey
where cc.delete_flag='N' and dd.app_flag='Y'
and cc.year = c.Dt_Of_Join
and cc.emp_mkey = c.emp_card_no
) p
where c.Dt_Of_Join = @dt_of_join
不确定是否猜对了一切(包括别名)。
如果您愿意,可以使用 insert exec
或任何其他插入临时文件的方式 table.
我创建了一个带有 3 个参数的存储过程。见下文
ALTER PROCEDURE [dbo].[Leave_Allocation_Mar_2016]
@Type nvarchar(10),
@Month int,
@Year int
AS
BEGIN
declare @emp_card_no numeric(9)
declare @emp_name varchar(20)
declare @dt_of_join datetime
declare @Total_days numeric(5,2)
declare @Days_worked numeric(5,2)
declare @Final_PaidDayLop numeric(5,2)
declare @TotalRecord int
declare @actualMonth int
declare @actualYear int
declare @actuallastdate varchar(20)
IF(@Type = 'C')
BEGIN
Print 'Yes I am in the Current process';
DECLARE daily_Allocate CURSOR FOR
Select distinct c.emp_card_no, c.emp_name, c.Dt_Of_Join from emp_mst c
join emp_mon_day d
on c.emp_card_no=d.emp_mkey
WHERE Dt_Of_Join = CAST(FLOOR(CAST( DATEADD(month, -6, GETDATE()) AS FLOAT ))AS DATETIME)
OPEN daily_Allocate
FETCH NEXT FROM daily_Allocate INTO
@emp_card_no, @emp_name, @Dt_Of_Join
WHILE @@FETCH_STATUS = 0
BEGIN
select @Total_days = Sum(total_day),@Days_worked = Sum(days_worked)
from emp_mon_day a
where a.emp_mkey = 2519
group by emp_mkey
PRINT 'Employee Card no = ' + cast(@emp_card_no as char)
PRINT 'Total days = ' + cast(@Total_days as char)
PRINT 'Days Worked = ' + cast(@Days_worked as char)
set @Final_PaidDayLop = 0;
set @TotalRecord = 0;
Select @Final_PaidDayLop =
isnull(sum(days),0)
from P_Emp_Del_App_Hdr c join P_Emp_Del_App_trl d on c.mkey=d.mkey
where c.delete_flag='N' and app_flag='Y' and c.year = @actualYear
and c.emp_mkey = @emp_card_no
Select @TotalRecord = ((1.75 * 6) / @Total_days) * (@Days_worked + @Final_PaidDayLop)
from emp_mon_day a where a.emp_mkey = @emp_card_no group by a.emp_mkey
PRINT 'Final Paid LOP ' + cast(coalesce(@Final_PaidDayLop,0) as char)
PRINT 'Total Record ' + cast(coalesce(@TotalRecord,0) as char)
FETCH NEXT FROM daily_Allocate INTO
@emp_card_no, @emp_name, @Dt_Of_Join
END
CLOSE daily_Allocate
DEALLOCATE daily_Allocate
END END
输出如下
Now what I want is, I want to insert the above data into the temp table.
我试过如下
CREATE TABLE #tmp1111
(
Sr_no int identity(1,1),
Current_Status nvarchar(255),
Emp_card_no int,
Total_days int,
days_worked int,
final_lop_paid int,
total_record int
)
首先我创建了一个临时文件 table 并尝试插入如下数据
INSERT INTO #tmp1111 exec Leave_Allocation_Mar_2016 'C', '2', '2016'
它执行成功但是当我运行 select 语句时临时 table.
中没有记录我正在使用 SQL 服务器 2005
不是打印值,而是将其存储在局部变量中(或插入到 table 变量中)并从存储过程中 return 它,然后它将起作用
例如:-
BEGIN
....
DECLARE @v_str AS NVARCHAR(500)
SET @v_str = ''
...
SELECT @v_str = @v_str+'Yes I am in the Current process'
...
SELECT @v_str = @v_str+'Total Records'
.
.
SELECT @v_str AS result
END
您的存储过程没有直接输出,仅打印变量。您需要 return 您想要的值,例如在 table:
请注意,table 是必需的,而不仅仅是 returning 变量,因为您的光标中可能有多个循环
ALTER PROCEDURE [dbo].[Leave_Allocation_Mar_2016]
@Type nvarchar(10),
@Month int,
@Year int
AS
BEGIN
DECLARE @Results TABLE (
Emp_card_no NUMERIC(9),
Total_days NUMERIC(5,2),
Days_worked NUMERIC(5,2),
Final_PaidDayLop numeric(5,2)
TotalRecord int
)
declare @emp_card_no numeric(9)
declare @emp_name varchar(20)
declare @dt_of_join datetime
declare @Total_days numeric(5,2)
declare @Days_worked numeric(5,2)
declare @Final_PaidDayLop numeric(5,2)
declare @TotalRecord int
declare @actualMonth int
declare @actualYear int
declare @actuallastdate varchar(20)
IF(@Type = 'C')
BEGIN
Print 'Yes I am in the Current process';
DECLARE daily_Allocate CURSOR FOR
Select distinct c.emp_card_no, c.emp_name, c.Dt_Of_Join from emp_mst c
join emp_mon_day d
on c.emp_card_no=d.emp_mkey
WHERE Dt_Of_Join = CAST(FLOOR(CAST( DATEADD(month, -6, GETDATE()) AS FLOAT ))AS DATETIME)
OPEN daily_Allocate
FETCH NEXT FROM daily_Allocate INTO
@emp_card_no, @emp_name, @Dt_Of_Join
WHILE @@FETCH_STATUS = 0
BEGIN
select @Total_days = Sum(total_day),@Days_worked = Sum(days_worked)
from emp_mon_day a
where a.emp_mkey = 2519
group by emp_mkey
PRINT 'Employee Card no = ' + cast(@emp_card_no as char)
PRINT 'Total days = ' + cast(@Total_days as char)
PRINT 'Days Worked = ' + cast(@Days_worked as char)
set @Final_PaidDayLop = 0;
set @TotalRecord = 0;
Select @Final_PaidDayLop =
isnull(sum(days),0)
from P_Emp_Del_App_Hdr c join P_Emp_Del_App_trl d on c.mkey=d.mkey
where c.delete_flag='N' and app_flag='Y' and c.year = @actualYear
and c.emp_mkey = @emp_card_no
Select @TotalRecord = ((1.75 * 6) / @Total_days) * (@Days_worked + @Final_PaidDayLop)
from emp_mon_day a where a.emp_mkey = @emp_card_no group by a.emp_mkey
PRINT 'Final Paid LOP ' + cast(coalesce(@Final_PaidDayLop,0) as char)
PRINT 'Total Record ' + cast(coalesce(@TotalRecord,0) as char)
INSERT INTO @Results
( Emp_card_no ,
Total_days ,
Days_worked ,
Final_PaidDayLop
)
VALUES ( @emp_card_no , -- Emp_card_no - numeric
@Total_days , -- Total_days - numeric
@Days_worked , -- Days_worked - numeric
@Final_PaidDayLop -- Final_PaidDayLop - numeric
)
FETCH NEXT FROM daily_Allocate INTO
@emp_card_no, @emp_name, @Dt_Of_Join
END
CLOSE daily_Allocate
DEALLOCATE daily_Allocate
SELECT 'Yes I am in the Current process', *
FROM @Results
END
END
我还建议整理变量命名的格式和一致性,以便更容易手动解析。一些错误处理以确保您的游标也始终关闭会很有用。
还建议将光标声明为 FAST_FORWARD、READ_ONLY:
What is the advantage of using FAST_FORWARD for defining a cursor?
而不是@Result table 变量使用如下:
CREATE TABLE #Results
(
Emp_card_no NUMERIC(9),
Total_days NUMERIC(5,2),
Days_worked NUMERIC(5,2),
Final_PaidDayLop NUMERIC(5,2),
TotalRecord INT
)
INSERT INTO #Results
(
Emp_card_no,
Total_days,
Days_worked,
Final_PaidDayLop
)
VALUES
(
@emp_card_no , -- Emp_card_no - numeric
@Total_days , -- Total_days - numeric
@Days_worked , -- Days_worked - numeric
@Final_PaidDayLop -- Final_PaidDayLop - numeric
)
在 DEALLOCATE daily_Allocate 之后插入下面的语句
SELECT * FROM #Results
DROP TABLE #Results
This select statement returns all rows which records are inserted in #Results temp table while executing cursor
进行这些更改,希望这对您有所帮助
更新:
ALTER PROCEDURE [dbo].[Leave_Allocation_Mar_2016]
@Type NVARCHAR(10),
@Month INT,
@Year INT
AS
BEGIN
SET NOCOUNT ON;
CREATE TABLE #Results
(
Emp_card_no NUMERIC(9),
Total_days NUMERIC(5,2),
Days_worked NUMERIC(5,2),
Final_PaidDayLop NUMERIC(5,2),
TotalRecord INT
)
DECLARE @emp_card_no NUMERIC(9)
DECLARE @emp_name VARCHAR(20)
DECLARE @dt_of_join DATETIME
DECLARE @Total_days NUMERIC(5,2)
DECLARE @Days_worked NUMERIC(5,2)
DECLARE @Final_PaidDayLop NUMERIC(5,2)
DECLARE @TotalRecord INT
DECLARE @actualMonth INT
DECLARE @actualYear INT
DECLARE @actuallastdate VARCHAR(20)
IF(@Type = 'C')
BEGIN
PRINT 'Yes I am in the Current process';
DECLARE daily_Allocate CURSOR
LOCAL SCROLL STATIC
FOR
SELECT DISTINCT c.emp_card_no, c.emp_name, c.Dt_Of_Join FROM emp_mst c
JOIN emp_mon_day d ON c.emp_card_no=d.emp_mkey
WHERE Dt_Of_Join =
CAST(FLOOR(CAST( DATEADD(month, -6, GETDATE()) AS FLOAT)) AS DATETIME)
OPEN daily_Allocate
FETCH NEXT FROM daily_Allocate INTO @emp_card_no, @emp_name, @Dt_Of_Join
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @Total_days = SUM(total_day), @Days_worked = SUM(days_worked)
FROM emp_mon_day a
WHERE a.emp_mkey = 2519
GROUP BY emp_mkey
PRINT 'Employee Card no = ' + cast(@emp_card_no AS CHAR)
PRINT 'Total days = ' + cast(@Total_days AS CHAR)
PRINT 'Days Worked = ' + cast(@Days_worked AS CHAR)
SET @Final_PaidDayLop = 0;
SET @TotalRecord = 0;
SELECT @Final_PaidDayLop = ISNULL(SUM(days), 0)
FROM P_Emp_Del_App_Hdr c JOIN P_Emp_Del_App_trl d ON c.mkey=d.mkey
WHERE c.delete_flag='N' AND app_flag='Y' AND c.year = @actualYear
AND c.emp_mkey = @emp_card_no
SELECT
@TotalRecord = ((1.75 * 6) / @Total_days) * (@Days_worked + @Final_PaidDayLop)
FROM emp_mon_day a
WHERE a.emp_mkey = @emp_card_no
GROUP BY a.emp_mkey
PRINT 'Final Paid LOP ' + CAST(COALESCE(@Final_PaidDayLop, 0) AS CHAR)
PRINT 'Total Record ' + CAST(COALESCE(@TotalRecord, 0) AS CHAR)
INSERT INTO #Results
(
Emp_card_no,
Total_days,
Days_worked,
Final_PaidDayLop
)
VALUES
(
@emp_card_no , -- Emp_card_no - numeric
@Total_days , -- Total_days - numeric
@Days_worked , -- Days_worked - numeric
@Final_PaidDayLop -- Final_PaidDayLop - numeric
)
FETCH NEXT FROM daily_Allocate INTO @emp_card_no, @emp_name, @Dt_Of_Join
END
CLOSE daily_Allocate
DEALLOCATE daily_Allocate
SELECT * FROM #Results
DROP TABLE #Results
END
END
然后EXEC Leave_Allocation_Mar_2016 'C', '2', '2016'
你会在table输出中得到结果
试试这个而不是光标:
declare @dt_of_join date
set @dt_of_join = DATEADD(month, -6, GETDATE())
Select
c.emp_card_no, c.emp_name,
(1.75 * 6) / NullIf(d.Total_days, 0)) * (IsNull(d.Days_worked, 0) + IsNull(p.Final_PaidDayLop, 0)) as TotalRecord
from dbo.emp_mst c
outer apply
(
select
sum(d.total_day) as total_days
sum(d.days_worker) as days_worker
from dbo.emp_mon_day d
WHERE d.emp_mkey = c.emp_card_no
GROUP BY d.emp_mkey
) d
outer apply
(
select sum(cc.days) as Final_PaidDayLop
from P_Emp_Del_App_Hdr cc
inner join P_Emp_Del_App_trl dd on cc.mkey=d.mkey
where cc.delete_flag='N' and dd.app_flag='Y'
and cc.year = c.Dt_Of_Join
and cc.emp_mkey = c.emp_card_no
) p
where c.Dt_Of_Join = @dt_of_join
不确定是否猜对了一切(包括别名)。
如果您愿意,可以使用 insert exec
或任何其他插入临时文件的方式 table.