Foxtable(狐表)用户栏目专家坐堂 → sql存储过程,如何使用select调用


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

主题:sql存储过程,如何使用select调用

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


加好友 发短信
等级:三尾狐 帖子:734 积分:5645 威望:0 精华:0 注册:2008/9/6 11:22:00
sql存储过程,如何使用select调用  发帖心情 Post By:2011/11/27 15:58:00 [只看该作者]

问题一:

例:有存储过程aa

代码:select * from 库存表

select 如何调用这个存储过程

比如:select sum(库存数量) from aa 该怎么修改  

 

问题二:

access 查询表a的生成代码为:select * from 库存

原狐表可以用:exec a 生成动态的结果

之后可以用 select * from a 访问结果

 

现在access查询表导入到sql后

查询表变为sql库表,生成代码没有

 

 

导入到sql中,该查询表a直接生成为sql表

这一下不能生成动态结果了,想保留原动态形态将access 的生成代码变转为 sql中的  存储过程,

同样在狐表中如何使用select调用这个存储过程进行二次加工


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/11/27 16:41:00 [只看该作者]

1、

Excute aa

 

2、第二个问题不明白了,你直接在SQL重新定义存储过程不好吗?


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


加好友 发短信
等级:三尾狐 帖子:734 积分:5645 威望:0 精华:0 注册:2008/9/6 11:22:00
  发帖心情 Post By:2011/11/27 17:10:00 [只看该作者]

以下是引用狐狸爸爸在2011-11-27 16:41:00的发言:

1、

Excute aa

 

2、第二个问题不明白了,你直接在SQL重新定义存储过程不好吗

 

1、Exec aa 是执行这个存储过程,我是说,如何在select 中 使用这个aa存储过程

2、我将华海的access表搬到sql,access查询表在sql中重新定义存储过程.

但是华海代码中的原代码:

exec aa

select * from aa

(aa 在access 中是查询表,access中可以执行)

到了sql,aa就变成了存储过程,

这一句:select * from aa 就不能执行了

该如何修改呢?

 

 

 

[此贴子已经被作者于2011-11-27 17:22:00编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/11/27 17:11:00 [只看该作者]

不需要select,直接exec aa,就能放回结果了,效果和select 语句一样。


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


加好友 发短信
等级:三尾狐 帖子:734 积分:5645 威望:0 精华:0 注册:2008/9/6 11:22:00
  发帖心情 Post By:2011/11/27 17:26:00 [只看该作者]

 

比如,华海access表导入到sql中,access查询表的代码则在sql存储过程中重新定义 

 

在狐表华海程序中有这样的命令:
select * from 存储过程名

会出错,提示表名不存在,

该如何修改

[此贴子已经被作者于2011-11-27 20:23:30编辑过]

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


加好友 发短信
等级:三尾狐 帖子:734 积分:5645 威望:0 精华:0 注册:2008/9/6 11:22:00
  发帖心情 Post By:2011/11/27 20:22:00 [只看该作者]

比如,华海access表导入到sql中,access查询表的代码则在sql存储过程中重新定义 

 

在狐表华海程序中有这样的命令:
select * from 存储过程名

会出错,提示表名不存在,

该如何修改


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/11/28 8:33:00 [只看该作者]

1、在SQl Server建立存储过程

2、那就Foxtable的代码,将

select * from 存储过程名

改为

Exec 存储过程名


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


加好友 发短信
等级:三尾狐 帖子:734 积分:5645 威望:0 精华:0 注册:2008/9/6 11:22:00
  发帖心情 Post By:2011/11/28 9:22:00 [只看该作者]

不好意思,我sql不熟,之前没有描述清楚,现引用华海的代码将这一个问题进行说明一下,请注意以下红色字体

 

华海出有这样一段代码:(以下红色字体均为原access中的查询表,导入到sql表中后,ckkc,cymx考虑均以存储过程的方式进行重新定义)

原ckkc在sql的存储过程代码为:

create proc ckkc
as SELECT 货品编码,仓库, 方向,入库数量,出库数量 FROM CYMX 
UNION ALL
SELECT 货品编码,仓库名称 AS 仓库,'入库' AS 方向,初始库存 AS 入库数量, '0' AS 出库数量 FROM 库存

--CYMX在access中又是另外一个查询表.到sql中CYMX重新定义为一个存储过程select ....from CYMA ,在这个存储过程中嵌套式的引用到另一个存储过程,不知道简单的复制过来,对不对 

 原cymx在sql的存储过程代码为,

 create proc cymx
as
SELECT '0' AS 序号, 货品编码, 日期, 单号, 经办人, 仓库, 方向, 供应单位, 类型, 部门, 入库数量, 出库数量, 单价, 金额
FROM
(SELECT t.货品编码,n.日期,T.单号,N.经办人,n.原仓库 AS 仓库,'出库' AS 方向,'' as 供应单位,'调拨出库' AS 类型,'' AS 部门, '0' as 入库数量,t.数量 AS 出库数量,t.单价,t.金额 FROM 调拨明细 AS T LEFT JOIN 库存调拨 AS N ON t.单号 = n.单号
UNION ALL
SELECT t.货品编码,n.日期,T.单号,N.经办人,n.目的仓库 AS 仓库,'入库' AS 方向,'' as 供应单位,'调拨入库' AS 类型,'' AS 部门,t.数量 AS 入库数量, '0' as 出库数量,t.单价,t.金额 FROM 调拨明细 AS T LEFT JOIN 库存调拨 AS N ON t.单号 = n.单号
UNION ALL
SELECT t.货品编码,n.日期,T.单号,N.经办人,n.仓库名称 AS 仓库,'入库' AS 方向,'' as 供应单位,t.类型 AS 类型,'' AS 部门,t.盈 AS 入库数量, '0' as 出库数量,t.单价,t.金额 FROM 盘点明细 AS T LEFT JOIN 库存盘点 AS N ON t.单号 = n.单号 WHERE t.类型='盘盈'
UNION ALL
SELECT t.货品编码,n.日期,T.单号,N.经办人,n.仓库名称 AS 仓库,'出库' AS 方向,'' as 供应单位,t.类型 AS 类型,'' AS 部门, '0' AS 入库数量,t.亏 AS 出库数量,t.单价,t.金额 FROM 盘点明细 AS T LEFT JOIN 库存盘点 AS N ON t.单号 = n.单号 WHERE t.类型='盘亏'
UNION ALL
SELECT t.货品编码,n.日期,T.单号,N.经办人,n.仓库名称 AS 仓库,n.出入库 AS 方向,N.供应单位,N.类型 AS 类型,N.部门,t.数量 AS 入库数量, '0' as 出库数量,t.单价,t.金额 FROM 出入库明细 AS T LEFT JOIN 出入库 AS N ON t.单号 = n.单号 WHERE n.出入库='入库'
UNION ALL
 SELECT t.货品编码,n.日期,T.单号,N.经办人,n.仓库名称 AS 仓库,n.出入库 AS 方向,N.供应单位,n.类型 AS 类型,N.部门, '0' AS 入库数量,t.数量 AS 出库数量,t.单价,t.金额 FROM 出入库明细 AS T LEFT JOIN 出入库 AS N ON t.单号 = n.单号 WHERE n.出入库='出库'). AS N
ORDER BY 日期

假设以上存储过程定义成功

在华海中一个窗口代码为ckcc 、cymx均为存储过程名

SELECT '0' AS 序号, 库名, (SELECT COUNT(*) FROM
(SELECT DISTINCT 库名,货品编码 FROM CKKC,仓库信息 WHERE 仓库 = 库名) WHERE 库名 = M.库名) AS 商品种类,
(SELECT COUNT(*) FROM CYMX WHERE 方向='入库' AND 仓库 = M.库名 ) AS 本期入库_笔数,
(SELECT SUM(金额) FROM CYMX WHERE 方向='入库' AND 仓库 = M.库名 ) AS 本期入库_金额,
(SELECT COUNT(*) FROM CYMX WHERE 方向='出库' AND 仓库 = M.库名 ) AS 本期出库_笔数,
(SELECT Round(SUM(金额),2) FROM CYMX WHERE 方向='出库' AND 仓库 = M.库名 ) AS 本期出库_金额,
(SELECT COUNT(*) FROM CYMX WHERE 仓库 = M.库名 AND (类型='调拨入库' OR 类型='调拨出库') @#$) AS 本期调拨_笔数,
(SELECT COUNT(*) FROM CYMX WHERE 仓库 = M.库名 AND 类型='调拨入库' @#$) AS 本期调拨_调入笔数,
 (SELECT COUNT(*) FROM CYMX WHERE 仓库 = M.库名 AND 类型='调拨出库' @#$) AS 本期调拨_调出笔数,
Round((SELECT SUM(金额) FROM CYMX WHERE 仓库 = M.库名 AND (类型='调拨入库' OR 类型='调拨出库') @#$),2) AS 本期调拨_金额,
(SELECT COUNT(*) FROM CYMX WHERE 仓库 = M.库名 AND (类型='盘盈' OR 类型='盘亏') @#$) AS 本期盘点_笔数,
(SELECT COUNT(*) FROM CYMX WHERE 仓库 = M.库名 AND 类型='盘盈' @#$) AS 本期盘点_盘盈笔数,
(SELECT COUNT(*) FROM CYMX WHERE 仓库 = M.库名 AND 类型='盘亏' @#$) AS 本期盘点_盘亏笔数,
Round((SELECT SUM(金额) FROM CYMX WHERE 仓库 = M.库名 AND (类型='盘盈' OR 类型='盘亏') @#$),2) AS 本期盘点_金额, '' AS 备注 FROM 仓库信息 AS M"
'入库汇总表'

这段代码中要调用cymx\ckkc这两个存储过程,单这样写 就可以调用吗

[此贴子已经被作者于2011-11-28 9:25:57编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/11/28 9:33:00 [只看该作者]

把CYMX做成一个SQL Server的查询表吧,注意不是Foxtable中的查询表。

SQL不熟悉,就用Foxtable自己的功能统计吧。

 

[此贴子已经被作者于2011-11-28 9:33:16编辑过]

 回到顶部