Click here to Skip to main content
15,899,754 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
i am using two insert into statement in single stored procedure, this stored procedure will execute automatically, For first insert into statement i am getting all rows but for second insert into statement i am receiving zero rows because of the condition "
SQL
where P_Date NOT IN (SELECT P_Date from Tbl_EmpPunchingDetail)
" Can anyone guide me that i should get only one row for each date for each Pin_Code without repeatation when executing stored procdeure multiple times for second insert into Statement???? or how i can use single where clause for both insert into statement ??

What I have tried:

SQL
<pre>CREATE PROCEDURE [dbo].[sp_UpdateEmpPunchingDetailTbl]
AS
BEGIN
    --First insert into statement
    INSERT INTO Tbl_EmpPunchingDetail
    SELECT Pin_Code AS Pin_Code
        ,P_Date AS P_Date
        ,IN1 AS IN1
        ,OUT1 AS OUT1
    FROM [Zultime].[dbo].[TIME_SHEET]
    WHERE P_Date NOT IN (
            SELECT P_Date
            FROM Tbl_EmpPunchingDetail
            )
        AND P_Date <= dateadd(day, datediff(day, 1, GETDATE()), 0)

    --Second insert into statement
    DECLARE @mydate DATETIME

    SELECT @mydate = GETDATE()

    DECLARE @P_Date TABLE ([P_Date] DATE)

    INSERT INTO @P_Date
    SELECT DISTINCT [P_Date]
    FROM [Zultime].[dbo].[TIME_SHEET]
    WHERE [P_Date] BETWEEN CONVERT(VARCHAR(25), DATEADD(dd, - (DAY(@mydate) + 8), @mydate), 101) 
    AND CONVERT(VARCHAR(25), DATEADD(dd, - (DAY(@mydate) - 22), @mydate), 101)

    INSERT INTO Tbl_EmpPunchingDetail
    SELECT [Pin_Code]
        ,P_Date
        ,'07:30' AS [IN1]
        ,'16:30' AS [OUT1]
    FROM [AttendanceCorrection].[dbo].[Tbl_FMOEmp]
    CROSS JOIN @P_Date
    WHERE P_Date NOT IN (
            SELECT P_Date
            FROM Tbl_EmpPunchingDetail
            )
        AND P_Date <= dateadd(day, datediff(day, 1, GETDATE()), 0)
END
Posted
Updated 21-Mar-17 18:47pm

1 solution

I am surprise, why you are not using Union Statement like

CREATE PROCEDURE [dbo].[sp_UpdateEmpPunchingDetailTbl]
AS
BEGIN

    DECLARE @mydate DATETIME

    SELECT @mydate = GETDATE()

    DECLARE @P_Date TABLE ([P_Date] DATE)

    INSERT INTO @P_Date
    SELECT DISTINCT [P_Date]
    FROM [Zultime].[dbo].[TIME_SHEET]
    WHERE [P_Date] BETWEEN CONVERT(VARCHAR(25), DATEADD(dd, - (DAY(@mydate) + 8), @mydate), 101) 
    AND CONVERT(VARCHAR(25), DATEADD(dd, - (DAY(@mydate) - 22), @mydate), 101)

    --First insert into statement
    INSERT INTO Tbl_EmpPunchingDetail
    SELECT Pin_Code AS Pin_Code
        ,P_Date AS P_Date
        ,IN1 AS IN1
        ,OUT1 AS OUT1
    FROM [Zultime].[dbo].[TIME_SHEET]
    WHERE P_Date NOT IN (
            SELECT P_Date
            FROM Tbl_EmpPunchingDetail
            )
        AND P_Date <= dateadd(day, datediff(day, 1, GETDATE()), 0)

 Union
 SELECT [Pin_Code]
        ,P_Date
        ,'07:30' AS [IN1]
        ,'16:30' AS [OUT1]
    FROM [AttendanceCorrection].[dbo].[Tbl_FMOEmp]
    CROSS JOIN @P_Date
    WHERE P_Date NOT IN (
            SELECT P_Date
            FROM Tbl_EmpPunchingDetail
            )
        AND P_Date <= dateadd(day, datediff(day, 1, GETDATE()), 0)

END
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900