Stored procedures TSQL:如果在存储过程中,则查询不返回行

Stored procedures TSQL:如果在存储过程中,则查询不返回行,stored-procedures,sql-server-2008-r2,Stored Procedures,Sql Server 2008 R2,我有一个需要一些参数的查询 在SQLServerManagementStudio的标准查询屏幕上执行它,其工作原理与预期一样,大约15秒后返回一些数据行。这是一个复杂的查询 但是在存储过程中执行它只返回头,不返回任何数据行 而且,执行它只需要1~2秒 没有返回或显示任何错误 这方面是: CREATE PROCEDURE [dbo].[sp_StoreProcedure] @FDId INT , @Year INT , @NDate DATETIME , @SDat

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

在SQLServerManagementStudio的标准查询屏幕上执行它,其工作原理与预期一样,大约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个联接。在这里展示它将是巨大的。

真的很容易犯错误

声明存储过程时:

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
请注意,调用过程时,
SDate
NDate
是相反的方式

这应该起作用:

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

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

错误可能在
复杂查询中的某个地方。如果您实际显示查询,可能会有人指出问题所在。我们需要真正查看查询,它可能很简单,例如查询文本中没有使用您的参数,因此它不会返回任何结果,但如果没有看到,就没有人可以知道。为什么不使用临时表来跟踪结果?这样,您可以找到记录的显示位置。这就是为什么您应该命名参数,而不是依赖序号位置。旁注:您不应该在存储过程中使用
sp
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用
sp.
并使用其他东西作为前缀,或者根本不使用前缀!谢谢你是个救生员。