0

我有一个需要一些参数的查询。

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

4

1 回答 1

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

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

于 2013-03-06T17:20:20.767 回答