【发布时间】:2013-03-06 16:54:45
【问题描述】:
我有一个需要一些参数的查询。
在 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
但它返回一个空表。
这怎么可能? 我能做些什么来解决它?
edit --> 复杂查询有 24 个连接。在这里展示它会是巨大的。
【问题讨论】:
-
错误可能在
complex query某处。也许如果您实际显示查询,有人将能够指出问题。 -
我们需要真正看到查询,它可能很简单,比如您的参数之一没有在查询文本中使用,因此它不返回任何结果,但没有看到它,没有人能说出来。
-
为什么不使用临时表来跟踪结果呢?这样您就可以找到记录消失的位置。
-
这就是为什么你应该命名你的参数而不是依赖于序数位置。
-
旁注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本不使用前缀!
标签: stored-procedures sql-server-2008-r2