2016-05-13 14 views
2

Ich habe zwei Abfragen unten, die für mich gleich sind, so sollten die gleichen Ergebnisse zurückgeben. Wie auch immer, die untere Abfrage gibt keine Daten zurück, aber ich kann nicht sehen warum?zwei Abfragen, die verschiedene Daten zurückgeben

Abfrage unter Rückkehr der richtigen Daten

SELECT  myDate, myTicker, SUM(myUnits) AS mUnits 
FROM   myTbl 
where myName = 'abc4' and myDate >= '2016-04-13' 
GROUP BY myDate, myTicker 

Die Abfrage unten gibt null Zeilen zurück, obwohl ich sehe nicht, warum seine die gleiche Abfrage mir wie oben ein.

declare @myF nvarchar, @FromDate date 
set @myF = 'abc4' 
set @FromDate = '2016-04-13' 
SELECT  myDate, myTicker, SUM(myUnits) AS mUnits 
FROM   myTbl 
where myName = @myF and myDate >= @FromDate 
GROUP BY myDate, myTicker 

Update

die Abfrage unten funktioniert, wie es scheint, die Mühe Abfrage nicht die Variable @myF wie

declare @myF nvarchar, @FromDate date 
set @myF = 'abc4' 
set @FromDate = '2016-04-13' 
SELECT  myDate, myTicker, SUM(myUnits) AS mUnits 
FROM   myTbl 
where myName = 'abc4' and myDate >= @FromDate 
GROUP BY myDate, myTicker 
+0

Try varchar statt nvarchar –

+0

bietet das Schema für die Tabelle 'myTbl' – piyushj

+0

Nun - in der ersten Abfrage Sie die Variable' haben myName = 'acb4''- aber in Ihrer zweiten Frage haben Sie '@myF =' ABC4 "Welche der beiden sind richtig? –

Antwort

3

Set Größe für NVARCHAR(4)

DECLARE @myF NVARCHAR(4), @FromDate DATE 
SET @myF = 'abc4' 
1

Diese zwei folgenden Abfragen sind wor ked für mich, und sind gleich.

Abfrage # 1:

SELECT myDate, myTicker, SUM(myUnits) AS mUnits 
FROM myTbl 
WHERE myName = 'abc4' and myDate >= '2016-04-13' 
GROUP BY myDate, myTicker 


Abfrage # 2:

DECLARE @myF NVARCHAR(MAX), @FromDate DATE 
SET  @myF  = 'abc4' 
SET  @FromDate = '2016-04-13' 

SELECT myDate, myTicker, SUM(myUnits) AS mUnits 
FROM myTbl 
where myName = @myF AND myDate >= @FromDate 
GROUP BY myDate, myTicker 
1

der Hauptgrund ist Default Length für NVARCHAR ist 1

Also, Ihr diese Abfrage

declare @myF nvarchar, @FromDate date 
set @myF = 'abc4' 
set @FromDate = '2016-04-13' 
SELECT  myDate, myTicker, SUM(myUnits) AS mUnits 
FROM   myTbl 
where myName = @myF and myDate >= @FromDate 
GROUP BY myDate, myTicker 

die Abfrage vergleichen wie zum ersten Abfrage zurückkehrend,

SELECT  myDate, myTicker, SUM(myUnits) AS mUnits 
FROM   myTbl 
where myName = 'a' and myDate >= '2016-04-13' 
GROUP BY myDate, myTicker 

Das ist, warum Ihr beide Abfrage nicht gleich ist.

Sie benötigen die Length Ihrer NVARCHAR Variable angeben, wie ..

declare @myF nvarchar(MAX), @FromDate date 
set @myF = 'abc4' 
set @FromDate = '2016-04-13' 
SELECT  myDate, myTicker, SUM(myUnits) AS mUnits 
FROM   myTbl 
where myName = 'abc4' and myDate >= @FromDate 
GROUP BY myDate, myTicker 

Dann werden Sie das erwartete Ergebnis.

Verwandte Themen