2016-06-11 1 views
1

J'ai une procédure stockée qui prend un paramètre comme DATE. qui retournera les données pour cette date de la table.Procédure stockée ne renvoyant aucune donnée pour la date passée

ALTER PROCEDURE [dbo].[UserReportData] 
    @As_ONDATE Datetime 
AS 
BEGIN 
    DECLARE @REPORTDATE datetime   
    --DECLARE @OPENING INT  

    SELECT * 
    INTO #temptable 
    FROM 
     (SELECT 
      a.CUser_id, b.User_Id, a.U_datetime AS REPORTDATE 
     FROM 
      inward_doc_tracking_trl a 
     INNER JOIN 
      user_mst b ON a.CUser_id = b.mkey 
         AND a.U_datetime = @As_ONDATE) AS x 

    DECLARE Cur_1 CURSOR FOR 
     SELECT CUser_id, User_Id FROM #temptable 

    OPEN Cur_1 

    DECLARE @CUser_id INT 
    DECLARE @User_Id INT 

    FETCH NEXT FROM Cur_1 INTO @CUser_id, @User_Id 

    WHILE (@@FETCH_STATUS = 0) 
    BEGIN 
     SELECT U_datetime 
     FROM inward_doc_tracking_trl       
     WHERE U_datetime = @As_ONDATE      

     UPDATE #temptable 
     SET REPORTDATE = @REPORTDATE 
     WHERE CUser_id = @CUser_id 
      AND User_Id = @User_Id 
      and 

     FETCH NEXT FROM Cur_1 INTO @CUser_id, @User_Id 
    END 

    CLOSE Cur_1 
    DEALLOCATE Cur_1 

    SELECT * FROM #temptable 

    DROP TABLE #temptable       
END 

Quand je l'exécute comme cette procédure stockée, je ne reçois pas de lignes retournées

exec UserReportData '20160610' 

mais dans le tableau I ont des lignes avec cette date.

Comme en cours d'exécution ci-dessous requête

SELECT U_datetime 
FROM inward_doc_tracking_trl  
WHERE u_datetime = '2016-06-10 14:56:11.000' 

Alors, pourquoi sont-il pas lors de l'exécution enregistrements renvoyés la procédure stockée?

Répondre

5

parce que votre colonne u_datetime contient la date & temps

une façon est de gérer dans la clause WHERE

and a.U_datetime >= @As_ONDATE 
AND a.U_datetime < DATEADD(DAY, 1, @As_ONDATE) 

vous pouvez également envisager de convertir votre requête de ne pas utiliser le curseur

+0

où doit J'ajoute ta réponse, je veux dire à quelle section? 'Select a.CUser_id, b.User_Id, a.U_datetime \t \t \t \t \t \t \t comme ReportDate ....' ici ?? – BNN

+0

oui, j'ai ajouté dans la clause where et cela a bien fonctionné. thanku tellement – BNN

+0

oui. à la clause "WHERE" – Squirrel