SQL:如果在存储过程内部,查询不返回行

时间:2013-03-06 16:54:46

标签: stored-procedures sql-server-2008-r2

我的查询需要一些参数。

在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个连接。在这里展示它将是巨大的。

1 个答案:

答案 0 :(得分: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

如果您指定哪个参数在执行时(而不是依赖于序号位置),这将是一个问题,这将是一个更好的想法。