Foxtable(狐表)用户栏目专家坐堂 → 存储过程里含有临时表 无法执行


  共有2410人关注过本帖树形打印复制链接

主题:存储过程里含有临时表 无法执行

帅哥哟,离线,有人找我吗?
aoc103
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:274 积分:3148 威望:0 精华:0 注册:2017/10/15 20:04:00
存储过程里含有临时表 无法执行  发帖心情 Post By: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;

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111375 积分:566939 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/1/4 21:32:00 [只看该作者]

Foxtable不支持在存储过程里返回临时表的数据。考虑建一个永久表放临时数据

 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1934 积分:17655 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By: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
难到这样不行?但从来没有出现过问题啊,谢谢!

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111375 积分:566939 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/1/5 16:32:00 [只看该作者]

这个我也无法理解。foxtable使用的数据库驱动是oledb,oledb驱动本身在调用SqlServer存储过程返回临时表确实是有问题的

 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1934 积分:17655 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2024/1/5 16:44:00 [只看该作者]

说的我心里拔凉拔凉的,会不会哪天出问题啊?我的所有项目中都这样用,最早的都十年了,也没有哪一家公司出现问题啊

 回到顶部