2017-05-27 3 views
1

ich eine Abfrage wie dieses:Datenänderungen in einem WAK nach SELECT-Abfrage

USE [MyDataBase] 
GO 
DECLARE @day DATE = '2017-05-18' 
DECLARE @camp VARCHAR(500) = '9015'; 
WITH ODCALLS AS (SELECT * FROM [dbo].[ODCalls_2017_05] 
    WHERE CONVERT(DATE, CallLocalTime) = @day AND LastCampaign = @camp AND CallType = 1 
) 

SELECT COUNT(*) FROM ODCALLS -- this returns 2998 
SELECT DATEPART(HOUR, CallLocalTime) AS dHOUR, COUNT(*) AS [Calls Received] 
    FROM ODCALLS 
    GROUP BY DATEPART(HOUR, CallLocalTime) 
    ORDER BY dHOUR -- this returns 24 rows as there are 24 hours in a day 
SELECT COUNT(*) FROM ODCALLS -- this returns 2907 

Die Instanz ist SQL Server Express 2014 und die Daten in der OdCalls_2017_05 Tabelle ändert sich nicht, hier eine Vorschau auf die Ergebnisse: enter image description here

Ich habe keine Ahnung, warum das passiert, hat jemand eine Erklärung?

Danke

+0

Wenn Ihre Abfragen funktionieren, haben Sie in Ihrer Datenbank/Ihrem Schema eine Tabelle mit dem Namen 'ODCalls'. –

+0

Ich glaube nicht, dass ich das tue – Fourat

Antwort

2

Ich bin überrascht, dass funktioniert überhaupt. Gemeinsame Tabellenausdrücke tun nicht handeln wie temporäre Tabellen. Die Abfrage wird als Eingabe in die nächste Abfrage verwendet (wie eine View-Liste), und die Optimierung kann sowohl für die nachfolgende Abfrage als auch für den CTE durchgeführt werden, sodass eine Ergebnismenge aus dem CTE möglicherweise nie allein existiert.

Nachfolgende Aufrufe an den CTE sollten nicht funktionieren, da dies die Definition eines CTE verletzt. Weitere Informationen finden Sie unter https://blogs.sentryone.com/aaronbertrand/backtobasics-ctes/.

Verwandte Themen