SQL Server
练习sql过程中代码一直报这个错太痛苦了:在递归查询 'BOM' 的列 'parent_itemcode' 中,定位点类型和递归部分的类型不匹配。以下是代码:-- 物料编码是 @InputItemCodeDECLARE @InputItemCode NVARCHAR(50) = 'YourInputItemCodeHere';
-- 清理baobiao临时表IF OBJECT_ID('tempdb..#baobiao') IS NOT NULL DROP TABLE #baobiao;
-- 创建baobiao临时表CREATE TABLE #baobiao ( itemcode NVARCHAR(50), itemname NVARCHAR(255), spec NVARCHAR(255), Material NVARCHAR(255), itemcode2 NVARCHAR(50), itemname2 NVARCHAR(255), spec2 NVARCHAR(255), Material2 NVARCHAR(255), usr_xlccc FLOAT, usr_xlcck FLOAT, usr_xlccg FLOAT, is_raw_material INT, [level] INT);
-- 使用递归CTE生成BOM并标记原材料WITH BOM AS (SELECT p.itemid, p.itemcode, p.itemname, p.spec, p.Material, p.usr_xlccc, p.usr_xlcck, p.usr_xlccg, CAST(NULL AS INT) AS parent_itemid, CAST(NULL AS NVARCHAR(50)) AS parent_itemcode, CASE WHEN p.usr_xlccc IS NOT NULL OR p.usr_xlcck IS NOT NULL OR p.usr_xlccg IS NOT NULL THEN 1 ELSE 0 END AS is_raw_material, 0 AS [level]FROM pdmitem pWHERE p.itemcode = @InputItemCode
UNION ALL
-- 递归成员:获取子物料
SELECT
p.itemid,
p.itemcode,
p.itemname,
p.spec,
p.Material,
p.usr_xlccc,
p.usr_xlcck,
p.usr_xlccg,
r.objid AS parent_itemid,
b.itemcode AS parent_itemcode,
CASE WHEN p.usr_xlccc IS NOT NULL OR p.usr_xlcck IS NOT NULL OR p.usr_xlccg IS NOT NULL THEN 1 ELSE 0 END AS is_raw_material,
b.[level] + 1
FROM
pdmitem p
INNER JOIN pdmitemref r ON p.itemid = r.refobjid
INNER JOIN BOM b ON r.objid = b.itemid
)
-- 插入到baobiao临时表INSERT INTO #baobiao ( itemcode, itemname, spec, Material, itemcode2, itemname2, spec2, Material2, usr_xlccc, usr_xlcck, usr_xlccg, is_raw_material, [level])SELECT b.itemcode, b.itemname, b.spec, b.Material, b.parent_itemcode, -- itemcode2存放父物料编码 (SELECT itemname FROM pdmitem WHERE itemcode = b.parent_itemcode) AS itemname2, -- 父物料名称 (SELECT spec FROM pdmitem WHERE itemcode = b.parent_itemcode) AS spec2, -- 父物料规格 (SELECT Material FROM pdmitem WHERE itemcode = b.parent_itemcode) AS Material2, -- 父物料材料 b.usr_xlccc, b.usr_xlcck, b.usr_xlccg, b.is_raw_material, b.[level]FROM BOM bWHERE b.parent_itemid IS NOT NULL OR b.level = 0;
-- 查询baobiao临时表的内容SELECT * FROM #baobiaoORDER BY [level], itemcode;
赞0
踩0