Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取光标以结束不定循环并显示临时表数据sql_Sql_Sql Server_Cursor_Temp Tables - Fatal编程技术网

获取光标以结束不定循环并显示临时表数据sql

获取光标以结束不定循环并显示临时表数据sql,sql,sql-server,cursor,temp-tables,Sql,Sql Server,Cursor,Temp Tables,我有一个带有游标和临时表的sql查询 DECLARE @PartNo Char(22) DECLARE @PartIssue AS CHAR(4) DECLARE @Level AS INT DECLARE @PartType AS CHAR(12) DECLARE @TempLeadTime AS FLOAT DECLARE @CumLeadTime AS FLOAT DECLARE @bomlforcursor AS FLOAT DECLARE @ldtimeforcursor AS F

我有一个带有游标和临时表的sql查询

DECLARE @PartNo Char(22)
DECLARE @PartIssue AS CHAR(4)
DECLARE @Level AS INT
DECLARE @PartType AS CHAR(12)
DECLARE @TempLeadTime AS FLOAT
DECLARE @CumLeadTime AS FLOAT 
DECLARE @bomlforcursor  AS FLOAT
DECLARE @ldtimeforcursor AS FLOAT
DECLARE @temp_level as float
DECLARE @BomParent as NVARCHAR(50)
DECLARE @ldt as NVARCHAR(50)
DECLARE @ldt_cum as int
DECLARE @TestCursor as CURSOR
DECLARE @Blevel as INT
DECLARE @Bchild as NVARCHAR(50)
DECLARE @Ptype as NVARCHAR(50) 
DECLARE @Bparent as NVARCHAR(50)
DECLARE @Bqty as NVARCHAR(50)
DECLARE @Ldtim as INT
DECLARE @Cissue as INT
DECLARE @Bmethod as INT
DECLARE @Rmethod as INT
DECLARE @Rqty as INT
DECLARE @Ldtime as INT
DECLARE @LdtimeforRQ as INT
DECLARE @cmldt as INT


IF OBJECT_ID('tempdb.dbo.#CumLeadTimRep') IS NOT NULL 
begin
DROP TABLE #CumLeadTimRep
end

--CREATE TABLE #CumLeadTimRep (BOMLevel INT, bmchild NVARCHAR(50), parttype NVARCHAR(50), bomparent NVARCHAR(50), bmqty INT, leadtime INT, childissue NVARCHAR(50), bmethod INT, method INT, requiredqty INT, ldtime INT, ldtimeforRQ INT)
SELECT @PartIssue = drawissno, @PartNo = partnum, @Level=1, @PartType = sm FROM partmaster  where partnum = 'AE40-0287810'
WITH Hierarchyct(BOMLevel,bmchild, parttype, bomparent, bmqty, leadtime, childissue,bmethod,rmethod, requiredqty) AS
      (SELECT     @Level AS BOMLevel,
                        @PartNo AS bomchild, 
                        @PartType as parttype,
                        cast('' AS CHAR(22)) AS bomparent,  
                        cast(1.0 AS FLOAT) AS bomqty, 
                        (SELECT stleadtim FROM stock WHERE stocknum = @PartNo) AS ldtime,
                        @PartIssue as childissue, 
                        eccbom AS bmethod, 
                        eccroute as rmethod,
                        cast(1.0 AS FLOAT) AS requiredqty
                        --@CumLeadTime AS cumleadtime
      FROM eccissue 
      WHERE eccpart = @PartNo AND eccissueno = @PartIssue 

      UNION ALL
      SELECT            (hierarchyct.BOMLevel + 1) AS BOMLevel,
                        bom.bomchild, 
                        (SELECT sm from partmaster where partnum = bom.bomchild) as parttype,
                        bom.bomparent, 
                        bom.bomqty, 
                        (SELECT stleadtim FROM stock WHERE stocknum = bom.bomchild) as ldtime,
                        --(CASE WHEN (stock.stleadtim = 0 AND parttype = 'MANUFACTURED') THEN (bom.bomqty*routing.runtim) ELSE (SELECT stleadtim FROM stock WHERE stocknum = bom.bomchild) END) AS ldtime,
                        (CASE WHEN LTRIM(RTRIM(bom.bomissue)) = 'CURR' THEN (SELECT drawissno FROM PartMaster WHERE PartNum = bom.bomchild) ELSE bom.bomissue END) AS childissue,
                        bom.baltmethod AS bmethod,    
                        (SELECT eccroute FROM eccissue WHERE eccissue.eccissueno = (CASE WHEN LTRIM(RTRIM(bom.bomissue)) = 'CURR' THEN (SELECT drawissno FROM PartMaster WHERE PartNum = bom.bomchild) ELSE bom.bomissue END) AND eccissue.eccpart = bom.bomchild ) as rmethod,
                        (bom.bomqty * hierarchyct.requiredqty) AS requiredqty
                       -- @CumLeadTime + leadtime as cumleadtime
      FROM bom  INNER JOIN hierarchyct ON bom.bomparent = hierarchyct.bmchild 


      WHERE bom.baltmethod =(SELECT eccbom FROM eccissue WHERE eccissue.eccpart = hierarchyct.bmchild AND eccissue.eccissueno = hierarchyct.childissue )
      )

SELECT * INTO #CumLeadTimRep
FROM
(     
SELECT      hierarchyct.*,
CASE WHEN (stleadtim = 0 AND partmaster.sm = 'MANUFACTURED') THEN (Hierarchyct.bmqty*sum(routing.runtim)) ELSE stleadtim  END AS ldtime, --, SUM(1) as cumldtime
CASE WHEN (stleadtim = 0 AND partmaster.sm = 'MANUFACTURED') THEN (Hierarchyct.requiredqty*sum(routing.runtim)) ELSE stleadtim  END AS ldtimeforRQ,
@cmldt as cumldtr
--, SUM(1) as cumldtime
FROM  hierarchyct left outer join routing on part = bmchild and raltmethod = rmethod left outer join stock on stocknum = bmchild  left outer join partmaster on partnum = Hierarchyct.bmchild 
GROUP BY BOMLevel,bmchild, parttype, bomparent, bmqty, leadtime, childissue,bmethod,rmethod, requiredqty, stleadtim, sm, part
--Where leadtime =0Mr1990
) as temp
--SELECT * FROM #CumLeadTimRep

--PRINT 'BomParent' + '                ' + 'BomQty' + '              ' + 'FSunit';
SET @TestCursor = CURSOR FOR
SELECT * FROM #CumLeadTimRep

OPEN @TestCursor
FETCH NEXT FROM @TestCursor INTO @Blevel, @Bchild, @Ptype, @Bparent, @Bqty, @Ldtim, @Cissue, @Bmethod, @Rmethod, @Rqty, @Ldtime, @LdtimeforRQ, @cmldt ;
SET @ldt_cum = 0
WHILE @@FETCH_STATUS = 0
BEGIN
SET  @ldt_cum = @ldt_cum + @Ldtime;
 INSERT INTO #CumLeadTimRep (cumldtr) VALUES (@ldt_cum);
FETCH NEXT FROM @TestCursor INTO @Blevel, @Bchild, @Ptype, @Bparent, @Bqty, @Ldtim, @Cissue, @Bmethod, @Rmethod, @Rqty, @Ldtime, @LdtimeforRQ, @cmldt;
END
CLOSE @TestCursor;
DEALLOCATE @TestCursor;

它不是在temp表的末尾停止,而是进入一个无限循环。我怎样才能阻止这一切?此外,它会显示“xx行受影响”,而不是显示更改的临时表。如何显示更改临时表?

且光标定义为?让我猜你读了#CumLeadTimRep并插入了它?向我们展示整个代码。我保证这可以而且应该在没有光标的情况下完成。@lad2025,用完整的代码更新了问题。@EvaldasBuinauskas更新了问题,因为我使用CTE,所以需要一个光标。@NisalUpendra所以我是对的,您可以循环使用插入到其中的同一个表。你不能只使用两个具有相同结构的表
#CumLeadTimRep_Input
#CumLeadTimRep_result
???