2016-04-21 83 views
2

我在存儲過程和查詢窗口中有相同的代碼,但得到了不同的結果。唯一的區別是SP選擇到臨時表中,然後從臨時表中選擇並且它正在SP中運行。來自存儲過程的結果與SSMS不同查詢

SP沒有參數 - 所以它沒有參數嗅探,SP有ANSI_NULLS ON。

RecId和invoiceOrderRecId是bigints,品牌數據類型爲nvarchar(10)

SELECT 
     ZIOH.Brand, 
     Count(RecId) as NumDispatched 
    FROM 
     ZFSINVOICEORDERHISTORY ZIOH 
    WHERE 
     ZIOH.DISPATCHDATETIME >= CAST(CURRENT_TIMESTAMP AS DATE) 
     AND 
     ZIOH.DISPATCHDATETIME < DATEADD(DD, 1, CAST(CURRENT_TIMESTAMP AS DATE)) 
     AND 
     ZIOH.INVOICEORDERRECID NOT IN 
           (SELECT 
            RecId 
           FROM 
            ZFSINVOICEORDER ZIO 
           WHERE 
            ZIO.PARTITION = ZIOH.PARTITION) 
    GROUP BY ZIOH.Brand 
    ORDER BY ZIOH.Brand 

從查詢窗口

╔═══════╦═══════════════╗ 
║ Brand ║ NumDispatched ║ 
╠═══════╬═══════════════╣ 
║ CCO ║    1 ║ 
║ CVDUK ║   13 ║ 
║ FLX ║   12 ║ 
║ MSFR ║   74 ║ 
║ MSGR ║    1 ║ 
║ MSUK ║   211 ║ 
║ PIAFR ║   25 ║ 
║ PIAUK ║   129 ║ 
╚═══════╩═══════════════╝ 

結果結果從SP

╔═══════╦═══════════════╗ 
║ Brand ║ NumDispatched ║ 
╠═══════╬═══════════════╣ 
║ CCO ║    1 ║ 
║ CVDUK ║    7 ║ 
║ FLX ║   12 ║ 
║ MSFR ║   53 ║ 
║ MSUK ║   147 ║ 
║ PIAFR ║   21 ║ 
║ PIAUK ║   121 ║ 
╚═══════╩═══════════════╝ 
+0

如果用測試日期'2016-04-21'替換'CAST(CURRENT_TIMESTAMP AS DATE)',會發生什麼? –

+0

我得到相同的結果。這是我嘗試的第一件事。 –

+2

你在哪裏執行SP?數據庫上下文是否相同?兩個用戶是同一個用戶嗎? –

回答

2

一種Uncommitte d交易導致了結果的差異 - 那是一個早晨的損失。