0
我有以下查詢。將臨時表插入到SQL Server中的遞歸查詢問題
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 @TestCursor as CURSOR
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
[email protected] 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 *
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
--, 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
這工作得很好,但是當我試圖讓最終的結果到一個臨時表(我需要這個運行光標)使用這個修改後的查詢:
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 @TestCursor as CURSOR
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
[email protected] 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
--, 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
我收到以下錯誤。
消息2714,級別16,狀態1,行51
已經有一個在數據庫中名爲 '#CumLeadTimRep' 的對象。Msg 156,Level 15,State 1,Line 62
關鍵字'as'附近的語法不正確。
試了很多,但沒有得到修復。可能是什麼問題?
哪裏有錯誤信息? – lad2025
加了他們,對不起,我忘了。 –
錯誤似乎相當自我解釋....你正試圖創建一個已經存在的表。要在使用'SELECT * INTO#CumLeadTimRep'創建表之前糾正這個問題,只需添加一個檢查來查看錶是否已經存在,然後再嘗試創建它 - IF IF OBJECT_ID(N'tempdb ..#CumLeadTimRep',' U')不是NULL DROP TABLE #CumLeadTimRep;' – GarethD