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;