2013-03-06 103 views
0

我有一個查詢需要一些參數。如果在存儲過程中,TSQL:查詢不返回行

在SQL Server Management Studio的標準查詢屏幕上執行它,它的工作方式與預期的一樣,約15秒後返回一些數據行。這是一個複雜的查詢。

但是在存儲過程中執行它只會返回沒有任何數據行的頭。

此外,它的執行只需要1〜2秒。

沒有錯誤返回或顯示。

它的方面是這樣的:

CREATE PROCEDURE [dbo].[sp_StoreProcedure] 
    @FDId INT 
    , @Year INT 
    , @NDate DATETIME 
    , @SDate DATETIME 
    , @MId INT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT of complex query 
END 

而且它的調用很簡單:

DECLARE @FDId INT 
DECLARE @Year INT 
DECLARE @NDate DATETIME 
DECLARE @SDate DATETIME 
DECLARE @MId INT 

SET @FDId = 926 
SET @Year = 2012 
SET @NDate = '1900-01-01' 
SET @SDate = GetDate() 
SET @MId = 1 

EXEC [outsystems].[dbo].[sp_StoreProcedure] 
    @FDId 
    , @Year 
    , @SDate 
    , @NDate 
    , @MId 

但它返回一個空表。

這怎麼可能? 我能做些什麼來解決它?

編輯 - >複雜的查詢有24個連接。在這裏展示它會是巨大的。

+0

錯誤可能是在'複雜查詢'某處。也許如果你真的顯示這個查詢,有人可以指出這個問題。 – 2013-03-06 17:07:55

+0

我們需要真的看到這個查詢,它可能像查詢文本中沒有使用其中一個參數那樣簡單,所以它不返回任何結果,但沒有看到它,沒有人能夠說明。 – steoleary 2013-03-06 17:11:59

+0

爲什麼不使用臨時表來跟蹤結果?這樣你可以找到記錄消失的地方。 – GRGodoi 2013-03-06 17:15:25

回答

2

容易犯錯。

當你宣佈你的存儲過程:

CREATE PROCEDURE [dbo].[sp_StoreProcedure] 
    @FDId INT 
    , @Year INT 
    , @NDate DATETIME 
    , @SDate DATETIME 
    , @MId INT 

執行它時,你沒有傳遞參數的正確順序的位置:

EXEC [outsystems].[dbo].[sp_StoreProcedure] 
    @FDId 
    , @Year 
    , @SDate 
    , @NDate 
    , @MId 

注意SDateNDate是相反的方式在調用該過程時周圍。

這應該工作:

EXEC [outsystems].[dbo].[sp_StoreProcedure] 
    @FDId 
    , @Year 
    , @NDate 
    , @SDate 
    , @MId 

這不會是一個問題了,你指定哪個參數是執行(而不是依賴於序號位置),這將是一個更好的主意前進時。

+0

謝謝!你是一個拯救生命的人。 – Gil 2013-03-06 17:26:14

相關問題