我有一个问题,我有一个存储过程,它返回结果,而且我在游标中的另一个过程中使用这个过程在表中插入一些数据,但是这个在游标中使用的过程返回数据,但我不在这种情况下不需要它。我只需要调用这个过程的过程的结果。
第一步:
ALTER PROCEDURE [dbo].[CopyInterface]
(
@intercafeId int,
@processIdPrefix nvarchar(50)
)
AS
BEGIN
DECLARE
@newInterfaceId int
SET NOCOUNT ON;
BEGIN TRANSACTION
....
some code
....
DECLARE @taskIdsToCopy table (interfacetaskid int NOT NULL)
INSERT INTO @taskIdsToCopy(interfacetaskid)
SELECT interfacetaskid FROM icinterfacetask
WHERE interfaceid = @intercafeId
DECLARE @taskIdForCursor int
DECLARE @newTaskId TABLE (id int)
DECLARE cur CURSOR LOCAL FOR
select interfacetaskid from @taskIdsToCopy
OPEN cur
FETCH NEXT FROM cur INTO @taskIdForCursor
while @@FETCH_STATUS = 0
BEGIN
EXEC CopyTask @taskIdForCursor, @newInterfaceId
FETCH NEXT FROM cur INTO @taskIdForCursor
END
CLOSE cur
DEALLOCATE cur
COMMIT TRANSACTION;
SELECT @newInterfaceId;
END
第二个程序:
ALTER PROCEDURE [dbo].[CopyTask]
@taskid int,
@destinationinterfaceid int = 0
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @newTaskIds table (id int NOT NULL)
DECLARE @stepIdsToCopy table (id int NOT NULL)
...
some code
...
declare @newId int = (select top 1 id from @newTaskIds);
INSERT INTO @stepIdsToCopy(id)
SELECT schemastepid FROM icschemastep
WHERE interfacetaskid = @taskid
DECLARE @stepIdForCursor int
DECLARE @newStepIds TABLE (id int)
DECLARE cur CURSOR LOCAL FOR
select id from @stepIdsToCopy
OPEN cur
FETCH NEXT FROM cur INTO @stepIdForCursor
while @@FETCH_STATUS = 0
BEGIN
INSERT INTO @newStepIds
EXEC dbo.CopyStep @stepIdForCursor, @newId
FETCH NEXT FROM cur INTO @stepIdForCursor
END
CLOSE cur
DEALLOCATE cur
;with cte as (
select steptar.schemasteporder oldorder, steptar.schemastepid oldid
from icschemastep as steptar
inner join icinterfacetask as tasktar on tasktar.interfacetaskid = steptar.interfacetaskid
inner join icschemastep as stepsour on stepsour.dataproviderid = steptar.schemastepid
inner join icinterfacetask as tasksour on tasksour.interfacetaskid = stepsour.interfacetaskid
where tasksour.interfacetaskid = @taskid
and stepsour.steptype = 10
)
select steptar.schemastepid as newstepforgoto, cte.oldid as oldid
into #newgotosteps
from icschemastep as steptar
inner join cte as cte on cte.oldorder = steptar.schemasteporder
where steptar.interfacetaskid = @newId
update steptar
set
dataproviderid = new.newstepforgoto
from icschemastep as steptar
inner join icschemastep as stepsour on stepsour.schemasteporder = steptar.schemasteporder
inner join icschemastep as oldstep on oldstep.schemastepid = steptar.dataproviderid
inner join #newgotosteps as new on new.oldid = steptar.dataproviderid
where stepsour.interfacetaskid = @taskid and steptar.interfacetaskid = @newId
COMMIT TRANSACTION;
SELECT @newId
END
我该如何解决这个问题?
答案 0 :(得分:0)
如果我正确理解您要查找的内容,我建议您尝试使用输出参数。其中一个或多个应该可以满足您的需求。 Microsoft has a good document available 了解它们的工作方式,包括如何在代码示例中处理它。