Sql server 抑制嵌套存储过程调用的虚假结果集

Sql server 抑制嵌套存储过程调用的虚假结果集,sql-server,Sql Server,根据要求,进行编辑以提供更多详细信息 我有一个存储过程(我们称之为spooter),大致如下: ALTER PROCEDURE [dbo].[spOuter] (@SelFromDateUTC smalldatetime ,@SelToDateUTC smalldatetime ,@SelDriverId int = null ) AS DECLARE @SelDriverName varchar(40) Set Nocount on exec dbo.spInner --<&l

根据要求,进行编辑以提供更多详细信息

我有一个存储过程(我们称之为
spooter
),大致如下:

ALTER PROCEDURE [dbo].[spOuter]
(@SelFromDateUTC smalldatetime  
,@SelToDateUTC smalldatetime  
,@SelDriverId int = null
) AS
DECLARE @SelDriverName varchar(40)
Set Nocount on

exec dbo.spInner --<<<<<<<<<<<<<<<<<<<<<<<<<<<

Select @SelDriverName = DriverName
  From dbo.tblDrivers
 Where DriverID = @SelDriverId

Set Nocount off  

Select @SelToDateUTC as @SelShiftDateUTC
      ,@SelDriverName  as SelDriverName
      , *
  From dbo.vwRptDriverProgress
 Where ActionTimeUTC between @SelFromDateUTC and @SelToDateUTC
   and DriverId = coalesce(@SelDriverId, DriverId)
 Order by DriverName,ActionTimeUTC,DriverLogId
当然,这些选择是insert/update语句的一部分,不应该返回结果集? 这有什么办法吗


SQLServer 2005 SP2 9.00.4035.00版可能会更改
微调器中update语句的语法以使用(请参阅)和
连接,从而可能会更改行为-例如:

UPDATE [locations]
   SET Distance = CalcDistance
  FROM dbo.tblMovementLocations AS [locations]
 INNER JOIN vwExcessiveOrderDistances AS [vw]
         ON [locations].MovementLocationId = [vw].MovementLocationId;
思考过程是,
vwExcessiveOrderDistances
中可能没有任何相应的记录可与
dbo.tblMovementLocations
中的记录匹配,这可能会导致数据库引擎返回一个空结果集,方法是将语句视为
dbo.tblMovementLocations
上的
SELECT
语句。如果是这样的话,那一定很奇怪


不过这只是我的猜测…

你能发布一些SQL来更接近你在
spInner
spOuter
中拥有的吗?你能在调用spInner后评论代码并查看spOuter的输出吗?这样,您就可以确定是spInner发送了结果集。@shahkalpesh注释了除调用spInner之外的所有内容,只留下了虚假的结果集。所以它肯定是来自spInner。Peter:就数据而言,伪结果集返回了什么?
UPDATE [locations]
   SET Distance = CalcDistance
  FROM dbo.tblMovementLocations AS [locations]
 INNER JOIN vwExcessiveOrderDistances AS [vw]
         ON [locations].MovementLocationId = [vw].MovementLocationId;