2016-06-22 24 views
1

Ich habe den folgenden Code:SQL Server Datetime-Variablen Rückkehr Nullwert

DECLARE @DispDateTime datetime 

SELECT @DispDateTime = table1.U_dispDate + convert(datetime, right('0'+convert(varchar, table1.U_dispTime/100),2)+':'+right('0'+convert(varchar,table1.U_dispTime % 100),2),120) 
from table1 

select table1.callID, 
     @DispDateTime, 
     table1.U_dispDate + convert(datetime, right('0'+convert(varchar, table1.U_dispTime/100),2)+':'+right('0'+convert(varchar,table1.U_dispTime % 100),2),120) 
from table1 

Sie können sehen, dass die Werte in meiner select-Anweisung sind genau das gleiche wie das, was in meiner Variablendeklaration ist. Doch am Ende meine Ergebnisse wie folgt aussehen:

callID DispDate Variable DispDate Calc 
13  NULL    2016-04-04 07:07:00.000 
15  NULL    2016-04-04 09:11:00.000 
16  NULL    2016-04-04 07:10:00.000 
19  NULL    2016-04-04 08:27:00.000 
21  NULL    2016-04-04 07:39:00.000 
23  NULL    2016-04-04 07:06:00.000 
24  NULL    2016-04-04 10:20:00.000 
25  NULL    2016-04-04 09:23:00.000 

Ich kann nicht für das Leben von mir herauszufinden, warum dies geschieht. Ich bin zu 98% sicher, dass es etwas Einfaches ist und ich bin eigentlich ein Idiot, aber es ist das zweite Mal, dass ich in ein paar Tagen auf dieses Problem gestoßen bin. (Es ist auch das erste Mal, dass ich Datetime-Variablen verwenden musste, was Speicher angeht, so dass es genauso wahrscheinlich etwas ist, was ich nicht weiß).

EDIT:

A) Der Grund, dass die Zeiten, als nvarchar gespeichert ist, weil das ist, was durch das System (SAP Business One diktiert wird, wenn es ankommt). Das kann ich nicht ändern.

B) Ich denke, was ich wirklich tun möchte, ist ein CTE, und das wird mein Problem beheben. Ich glaube, ich habe gerade vergessen, wie Variablen funktionieren oder etwas (I. E. nicht durch Zeile festgelegt, aber einmal eingestellt und dann ausgeführt).

Danke für die Hilfe alle!

+0

Die absolut beste Option wäre es, das Speichern von Datumsangaben als Varchare zu unterbinden. Eine andere Sache zu beachten ist, dass Sie nicht die Länge Ihrer Varchars angegeben haben. Dies bedeutet, dass die Standardeinstellung verwendet wird, die sich je nach Kontext ändern kann. Am besten geben Sie immer die Länge an. Wie dort gepostet scheint es kein Problem zu geben. Können Sie Beispieldaten posten, die dieses Problem reproduzieren können, damit wir Ihnen bei der Behebung helfen können? –

+0

Was sollte 'SELECT @DispDateTime = ...' bedeuten? Sie brauchen (können) nur einen Wert in '@ DispDateTime' auswählen und versuchen, die ganze Spalte zu schreiben :) Verwenden Sie' TOP 1' oder bestimmen Sie einen signifikanten Wert für diese Variable. – gofr1

+0

Überprüfen Sie SELECT table1.U_dispDate, konvertieren (datetime, rechts ('0' + konvertieren (varchar, table1.U_dispTime/100), 2) + ':' + rechts ('0' + konvertieren (varchar, table1.U_dispTime% 100), 2), 120) aus table1 table1.callID auswählen. ....... Ist es NULL für irgendeine Spalte –

Antwort

0

Vielleicht haben Sie mehrere Ergebnisse für Ihre Variable @DispDateTime.

Sie benötigen ein eindeutiges Ergebnis für @DispDateTime.

Zum Beispiel:

SELECT TOP 1 @DispDateTime = table1.U_dispDate + ... 

oder eine where-Klausel.

+0

er hat mehrere Ergebnisse - die zweite Abfrage verwendet die gleiche Tabelle und gibt viele Zeilen zurück – xdd