2011-10-17 37 views
0

我試圖調試SSRS報告顯示一些可怕的結果。我正在使用sql profiler我已經抓住了正在運行的確切查詢,這是使用exec sp_executesql執行的。sp_executesql從視圖返回不同的結果比直接運行查詢

查詢從視圖返回結果。

如果我運行包含sp_executesql的查詢,我會得到一組結果。 如果我抓住嵌套在內部的查詢並自行運行它,我會得到一組不同的結果。

我不知道這是如何可能的。查詢是相同的,我的印象是sp_executesql只是執行查詢。

有什麼我失蹤或如何進一步調試?

exec調用看起來是這樣的:

exec sp_executesql N'SELECT FirstName, LastName, DateOfBirth FROM ViewName WHERE 
    DateOfBirth >= @pStartDate AND DateOfBirth <= @pEndDate',N'@pStartDate datetime, 
    @pEndDate datetime',@pDate='2010-07-17 00:00:00:000',@pEndDate=''2010-07-17 
    23:59:59:000' 

如果我跑,我得到一個結果集。

然後,如果我運行:

SELECT FirstName, LastName, DateOfBirth FROM ViewName WHERE 
    DateOfBirth >= '2010-07-17 00:00:00:000' AND 
    DateOfBirth <= '2010-07-17 23:59:59:000' 

我得到一個稍微不同的結果集。

+0

任何可能性視圖出現兩次與不同的所有者? – Sparky

+0

不......我也放棄了這個觀點,並在有任何古怪的情況下重新創建它。 – ClickPOSAust

+0

和實際的代碼? – gbn

回答

0

我會嘗試粘貼查詢作爲是(加倍的單引號是)進入EXEC sp_executesql並驗證結果與手動運行相同。如果不是,那麼它將與日期參數有關,如果相同,那麼它可能是某種所有者/安全項目。

+0

是的,它結束了日期...通過參數是'2010-07-17 23:59:59:000',無論出於何種原因給出了一組不同的結果沒有執行官就跑了。如果我刪除了時間組件(在非'exec'查詢中),它會產生相同的結果。我不知道這是爲什麼... – ClickPOSAust

+0

它可能是由於您的SQL Server文化將日期參數格式化爲其自己的日期格式。 –

+0

那麼......哪一個可能會變得格式化? sp_execute調用,或者當我運行查詢時,它是?我的意思是......如果在某個時候正在格式化,我怎麼才能知道發生了什麼? – ClickPOSAust

1
  • 您可能正在連接不同的登錄名。

這意味着結果將通過過濾器基於SUSER_SNAME或一個不同的模式(dbo.View VS OtherSchema.View)被affectefd。它可能在視圖內。

  • 你有空/空字符串不同的地方

  • 不同的數據庫或服務器

+0

我看不到這樣的東西......我只是在本地運行這兩個查詢,絕對指向相同的數據庫...... – ClickPOSAust

+0

使用dbo.ViewName會給你帶來什麼? – gbn

+0

是啊,相同的結果... – ClickPOSAust

相關問題