【问题标题】:Stored Procedure returns an Empty Table存储过程返回一个空表
【发布时间】:2015-07-08 19:54:33
【问题描述】:

我正在尝试执行以下执行存储过程的命令:

exec FSDBMR.dbo.usp_zPlannedOrder 16352705, 0.0000, 'Y'

但是它返回一个空表:


但是,当我通过 Web 应用程序执行存储过程时,它确实返回了一个结果,但当我使用 SQL Server Management Studio 运行它时却没有。

如何运行存储过程并获得它应该返回的结果?存储过程没有问题,但以防万一:

USE [FSDBMR]
GO
/****** Object:  StoredProcedure [dbo].[usp_zPlannedOrder]    Script Date: 07/08/2015 15:46:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO



ALTER procedure [dbo].[usp_zPlannedOrder]


 @anReportInstanceID      int
,@afmultiplier            float
,@DeleteTempData          varchar(1) = 'Y'                    -- 'Y' means delete the temp data

as

select im.ItemNumber
      ,case 
       when im.MakeBuyCode = 'M' 
       then im.Planner
       else im.Buyer
       end as PlannerBuyer  -- two type, 'C' and 'S'
      ,imd.ReplanCode
      ,im.LastPeriodReviewDate   ReplanDate
      ,im.ItemDescription
      ,im.ItemUM
      ,im.ItemRevision
      ,im.MakeBuyCode
      ,im.ItemType
      ,im.ItemStatus
      ,im.OrderPolicy
      ,im.IsInspectionRequired
      ,im.DecimalPrecision
      ,imd.OnHandQuantity
      ,case
       when rsd.SupplyDemandType = 'D' or rsd.SupplyDemandType = 'S' 
       then convert(char(1),rsd.StartForecastPeriod) 
       else '' 
       end StartForecastPeriod
      ,case 
       when rsd.SupplyDemandType = 'I' 
       then null 
       else rsd.RequiredDate
       end RequiredDate
      ,case 
       when rsd.SupplyDemandType = 'D' 
       then rsd.GrossRequiredFlag
       else null
       end GrossRequiredFlag
      ,case rsd.PlannedOrderQuantity
       when 0
       then case rsd.SupplyDemandType
            when 'D'
            then rsd.GrossRequiredQuantity * @afmultiplier
            else null 
            end
       else null
       end GrossRequiredQuantity
      ,case rsd.PlannedOrderQuantity
       when 0
       then case rsd.SupplyDemandType
            when 'S'
            then rsd.ScheduledReceiptQuantity * @afmultiplier
            else null 
            end
       else null
       end ScheduledReceiptQuantity
      ,rsd.ProjectedAvailableQuantity * @afmultiplier ProjectedAvailableQuantity
      ,case rsd.PlannedOrderQuantity
       when 0 then null
       else rsd.PlannedOrderQuantity * @afmultiplier
       end PlannedOrderQuantity
      ,case 
       when rsd.SupplyDemandType = 'P' 
       then 'P'--'CUSTOM PROD INV'
       else rsd.PeggingInformation
       end PeggingType
      ,rsd.MessageCount Messages
      ,rsd.SupplyDemandKey SuperKey
from FS_Item im (readuncommitted)
join FS_ItemData imd  (readuncommitted) on (im.ItemKey = imd.ItemKey)
left join FSDBMRTemp.dbo.FS_ReportSDASupplyDemand rsd  (readuncommitted) on im.ItemKey = rsd.ItemKey

where rsd.ReportInstanceKey =@anReportInstanceID 

order by ItemNumber, RequiredDate, TopLevelDemandKey, SupplyDemandType desc, rsd.SupplyDemandKey


-- delete Instance from FS_ReportSDASupplyDemand and FS_ReportSDASupplyDemand table
-- the 3rd parameter for usp_ReportDeleteInstance is for SequenceNo,we do not need here
exec usp_ReportDeleteInstance @anReportInstanceID, null , null

return

【问题讨论】:

  • 您可以访问分析器吗?如果是这样,请运行跟踪并验证两种方法(Web 和 SSMS)是否使用相同的参数调用相同版本的相同存储过程。
  • 您的 proc 的结尾似乎也删除了报告实例,这不允许您使用相同的参数重新运行 proc。您确定@anReportInstanceID 是在从 SQL 运行之前创建的吗?
  • 第四次转变,嗯?老学校。

标签: sql-server-2008 stored-procedures


【解决方案1】:

请确保存储过程在运行 Web 版本的同一实例/sql 服务器数据库上执行。案例数据可能在一台服务器上,而在另一台服务器上不存在!

【讨论】:

    猜你喜欢
    • 2014-05-22
    • 1970-01-01
    • 2012-04-10
    • 2016-01-25
    • 2015-06-03
    • 2011-11-06
    • 1970-01-01
    相关资源
    最近更新 更多