2016-06-10 16 views
0

I Tabelle, in der Wert meiner Datumsspalte haben auszuführen auch mit der Zeit gespeichert wirdNicht in der Lage, die gespeicherte Prozedur

wie diese 2016.06.10 14: 56: 11,000

Jetzt, während meine Ausführung SP, ich übergebe einen Parameter als Datum wie dieses exec UserReportData '06-10-2016', aber es zeigt keine Datensätze. Wie es 4 Datensätze in der Tabelle hat.

Warum?

UPDATE

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

    SELECT * 
    INTO #temptable 
    FROM 
     (SELECT DISTINCT 
      a.CUser_id, b.User_Id,a.U_datetime as REPORTDATE, 
      b.first_name + ' ' + b.last_name AS USERNAME, 
      0 OPENING, 0 TOTAL_DOCUMENT, 0 INWARD, 0 FIRST_LEVEL_PROCESSING, 0 DATA_ENTRY 
     FROM 
      inward_doc_tracking_trl a, user_mst b 
     WHERE 
      a.CUser_id = b.mkey 
      AND a.U_datetime = CONVERT(varchar(10), @As_ONDATE, 103)) 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 @REPORTDATE 
     FROM inward_doc_tracking_trl       
     WHERE U_datetime = CONVERT(varchar(10), @As_ONDATE, 103) 

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

     FETCH NEXT FROM Cur_1 INTO @CUser_id, @User_Id 
    END 

    CLOSE Cur_1 
    DEALLOCATE Cur_1 

    SELECT * 
    FROM #temptable 

    DROP TABLE #temptable 
END 
+0

Können Sie den Prozedurcode eingeben? – RubbleFord

+0

[Schlechte Angewohnheiten zu treten: Verwenden von alten JOINs] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins. aspx) - diese alte * durch Kommas getrennte Liste von Tabellen * style wurde durch die * richtige * ANSI 'JOIN'-Syntax im ANSI - ** 92 ** SQL Standard ersetzt (** vor mehr als 20 Jahren **) und seine Verwendung wird davon abgeraten –

Antwort

0

Sie sind in einem Datum als String übergeben (mit impliziter Vorerst 00.00), die Sie werfen ein Datum zu sein, noch mit der Zeit 00.00 Uhr ist, und versuchen, Daten mit Zeiten zu vergleichen. Es wird keine Ergebnisse geben, da die Zeit nicht übereinstimmt.

Sie müssen entweder:

  1. Cast die Datumzeit auf ein Datum, ein genaues Datum passen (nicht gut, erfordert jedes Datum in der Spalte neu zu berechnen)
  2. ändern Sie die Suche suchen zwischen Datum + ' + bisher '23: 59' 00.00' (oder, wenn Sie zufrieden sind, können Sie einfach einen Tag hinzufügen)

Update für Ihre where-Klausel die einfache Möglichkeit zu nehmen 2:

where a.CUser_id = b.mkey 
    and a.U_datetime BETWEEN CONVERT(varchar(10), @As_ONDATE, 103) 
        AND DATEADD(day, 1, CONVERT(varchar(10), @As_ONDATE, 103)) 
+0

Ihre Antwort hinzugefügt, aber immer noch keine Datensätze – BNN

+0

@NK versuchen, die SP mit dem Datum als '10 -06-2016 ' – cjk

+0

rannte es aber mit Fehler als 'Kann den Wert NULL in die Spalte einfügen' REPORTDATE ', Tabelle' tempdb.dbo. # Testable ' – BNN