以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 存储过程里含有临时表 无法执行 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=189922) |
-- 作者:aoc103 -- 发布时间:2024/1/4 21:01:00 -- 存储过程里含有临时表 无法执行 C REATE PROCEDURE MyProcedure AS BEGIN w ith 流水表 as (S ELECT a.填单日期, \'采购销售单\' 单据类型, a.单据编号, a.客户编号, d .客户名称, e.供货商编号, e.供货商名称, b.商品编号, c.品牌, c.型号, c.片数, b.等级, b.色号, b.数量, b.销售片价, b.优惠金额, c.片数 * b.销售片价 * b.数量 AS 应收增加, 0 应收减少, 0 结欠金额 FROM 采购销售表_主表 AS a INNER JOIN 采购销售表_明细 AS b ON a._Identify = b.父表ID INNER JOIN TBL_商品表 AS c ON b.商品编号 = c.商品编号 INNER JOIN TBL_客户表 AS d ON a.客户编号 = d .客户编号 INNER JOIN TBL_供货商表 AS e ON a.供货商编号 = e.供货商编号 UNION ALL S ELECT a.填单日期, a.单据类型, a.单据编号, a.收款单位编号 AS 客户编号, d .客户名称, \'\' 供货商编号, \'\' 供货商名称, \'\' 商品编号, \'\' 品牌, \'\' 型号, \'\' 片数, \'\' 等级, \'\' 色号, \'\' 数量, \'\' 销售片价, \'\' 优惠金额, 0 应收增加, b.金额 AS 应收减少, 0 结欠金额 FROM 收款表_主表 AS a INNER JOIN 收款表_明细 b ON a._Identify = b.父表ID INNER JOIN TBL_客户表 AS d ON a.收款单位编号 = d .客户编号) -- 创建临时表 S ELECT * INTO #销售流水表 FROM 流水表 --这里含有临时表 就没有办法执行数据 在窗口里 表格不显示任何数据 -- 查询临时表数据并输出结果 S ELECT * FROM #销售流水表;
DROP TABLE #销售流水表; END;
|
-- 作者:有点蓝 -- 发布时间:2024/1/4 21:32:00 -- Foxtable不支持在存储过程里返回临时表的数据。考虑建一个永久表放临时数据 |
-- 作者:HappyFt -- 发布时间:2024/1/5 16:19:00 -- 应该不会吧?有点疑问,请教一下蓝老师 我的项目中的储存过程中就用了大量的临时表,都是在最后查询数据绑定到ft的窗口表中的,
下面是储存过程最后的代码: --汇总生产指令单的所有相关数量 SELECT a.指令单号 , a.产品编码 , t1.品名 , t1.规格 , a.订单数量 , a.需求数量 , a.交货日期 , a.制单日期 , a.生产车间 , a.物料编码 , t2.品名 AS 物料名称 , t2.规格 AS 物料规格 , a.用量PCS , b.累计领料 , c.累计退料 , a.用量PCS - ISNULL(b.累计领料, 0) + ISNULL(c.累计退料, 0) AS 未领料量 , a.单根产量 , a.单根产量 * ( ISNULL(b.累计领料, 0) - ISNULL(c.累计退料, 0) ) AS 领料产量 , d.完工数量 AS 生产入库 , d.不合格数量 , fg.修复数量 , CASE WHEN bf.报废数量 > 0 THEN bf.报废数量 WHEN fg.报废数量 > 0 THEN fg.报废数量 ELSE 0 END AS 报废数量 , a._Identify FROM #scd a LEFT JOIN #scll b ON a.指令单号 = b.生产单号 AND b.产品编码 = a.产品编码 AND b.物料编码 = a.物料编码 AND b.生产车间 = a.生产车间 LEFT JOIN #sctl c ON a.指令单号 = c.生产单号 AND c.产品编码 = a.产品编码 AND c.物料编码 = a.物料编码 AND c.生产车间 = a.生产车间 LEFT JOIN #scrk d ON a.指令单号 = d.生产单号 AND d.产品编码 = a.产品编码 AND d.生产车间 = a.生产车间 LEFT JOIN #fg fg ON a.指令单号 = fg.生产单号 AND fg.产品编码 = a.产品编码 AND fg.生产车间 = a.生产车间 LEFT JOIN #bf bf ON a.指令单号 = bf.生产单号 AND bf.产品编码 = a.产品编码 AND bf.生产车间 = a.生产车间 LEFT JOIN dbo.产品编码 t1 ON t1.产品编码 = a.产品编码 LEFT JOIN dbo.产品编码 t2 ON t2.产品编码 = a.物料编码; 然后在ft的前端用类似下面的代码绑定数据到表中的, cmd.CommandText = "Exec usp_scd20 \'" & cj & "\',\'" & r("产品编码") & "\',\'" & ds & "\',\'" & de & "\'" dt = cmd.ExecuteReader tbl2.StopRedraw tbl2.DataSource = dt 难到这样不行?但从来没有出现过问题啊,谢谢! |
-- 作者:有点蓝 -- 发布时间:2024/1/5 16:32:00 -- 这个我也无法理解。foxtable使用的数据库驱动是oledb,oledb驱动本身在调用SqlServer存储过程返回临时表确实是有问题的 |
-- 作者:HappyFt -- 发布时间:2024/1/5 16:44:00 -- 说的我心里拔凉拔凉的,会不会哪天出问题啊?我的所有项目中都这样用,最早的都十年了,也没有哪一家公司出现问题啊 |