| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 251 人关注过本帖
标题:请教关于VFP执行SQL SERVER有参数的存储过程
只看楼主 加入收藏
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:686
专家分:20
注 册:2014-1-16
结帖率:88.98%
收藏
已结贴  问题点数:20 回复次数:11 
请教关于VFP执行SQL SERVER有参数的存储过程
SQLSERVER的存储过程语句如下:
程序代码:
CREATE PROCEDURE sb_query
    @c_sb_bm NVARCHAR(30),
    @c_lb1 NVARCHAR(30)
AS
BEGIN
    SELECT * FROM shebei
    WHERE sb_bm=@c_sb_bm and zl_id in (select id from shebei_zl where lb1=@c_lb1)
END


vfp执行过程语句如下:
cs_sb_bm="zhijiang"
cs_lb1="mijiu"
str_shebei=SQLEXEC(con,"EXEC sb_query @c_sb_bm=?cs_sb_bm,@c_lb1=?cs_lb1","shebei")


SQLSERVER的存储过程没有问题,但是VFP执行有问题,不能通过,但是我也不知道怎么写,恳请师傅们帮忙指正下
搜索更多相关主题的帖子: 存储过程 VFP SQL 参数 执行 
2024-06-08 19:36
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:686
专家分:20
注 册:2014-1-16
收藏
得分:0 
我再把存储过程的完整代码发下:
程序代码:
USE [yksb]
GO
/****** Object:  StoredProcedure [dbo].[sb_query]    Script Date: 2024/6/8 19:59:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sb_query]
    @c_sb_bm NVARCHAR(30),
    @c_lb1 NVARCHAR(30)
AS
BEGIN
    SELECT * FROM shebei
    WHERE sb_bm=@c_sb_bm and zl_id in (select id from shebei_zl where lb1=@c_lb1)
END
2024-06-08 20:02
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:686
专家分:20
注 册:2014-1-16
收藏
得分:0 
问题解决了,在VFP执行的时候把EXEC sb_query @c_sb_bm=?cs_sb_bm,@c_lb1=?cs_lb1 改成EXEC sb_query ?cs_sb_bm,?cs_lb1就可以了
2024-06-09 14:37
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:686
专家分:20
注 册:2014-1-16
收藏
得分:0 
但是接下来我想把存储过程的语句改复杂点,却失败了,师傅们能否帮忙看下,
select * from (SELECT *,shebei_zl.lb1,shebei_zl.lb2,shebei_zl.lb3,shebei_zl.zzs FROM shebei left join shebei_zl on shebei.zl_id=shebei_zl.id) where sb_bm=@c_sb_bm and lb1=@c_lb1
2024-06-09 14:42
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:686
专家分:20
注 册:2014-1-16
收藏
得分:0 
改成如下还是不行:
SELECT *,shebei_zl.lb1,shebei_zl.lb2,shebei_zl.lb3,shebei_zl.zzs FROM shebei left join shebei_zl on shebei.zl_id=shebei_zl.id where shebei.sb_bm=@c_sb_bm and shebei_zl.lb1=@c_lb1
2024-06-09 14:52
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:688
专家分:2634
注 册:2018-3-13
收藏
得分:20 
* 没指定是哪个表的所有列吧,这样呢?

SELECT A.*, B.lb1, B.lb2, B.lb3, B.zzs
FROM shebei A
left join shebei_zl B on A.zl_id = B.id
where A.sb_bm = @c_sb_bm and B.lb1 = @c_lb1


这家伙很懒,啥也没留下
2024-06-09 16:30
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:686
专家分:20
注 册:2014-1-16
收藏
得分:0 
感谢版主csyx,这个问题解决了,又有新的问题了,现在我在存储过程查询了2个表,VFP端怎么接受呢?我试了以下,没有成功,代码如下:
str_shebei=SQLEXEC(con,"EXEC sb_query ?cs_sb_bm,?cs_lb1","shebei","shebei_cs")

2024-06-10 06:46
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:688
专家分:2634
注 册:2018-3-13
收藏
得分:0 
返回多个表时,从第二个开始的命名自动依次为第一个表后面加序号,例如:

sqlexec(con, "select '第1个表'; select '第二个表'", "result")
执行后返回的两个临时表别名分别为 result 和 result1;若返回多个表,则后面依次为 result2, result3 。。。

也就是说,只允许你指定第一个临时表的别名,后面的临时表 vfp 自动命名

[此贴子已经被作者于2024-6-10 07:42编辑过]


这家伙很懒,啥也没留下
2024-06-10 07:37
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:686
专家分:20
注 册:2014-1-16
收藏
得分:0 
版主,您好,您上面这句没有执行存储过程的语句啊,我加上存储过程,用以下的语句,但是过不了
str_shebei=SQLEXEC(con,"EXEC sb_query ?cs_sb_bm,?cs_lb1","select '第1个表'; select '第二个表'", "result")
2024-06-10 13:24
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:688
专家分:2634
注 册:2018-3-13
收藏
得分:0 
以下是引用fanjinyu9108在2024-6-10 13:24:29的发言:
str_shebei=SQLEXEC(con,"EXEC sb_query ?cs_sb_bm,?cs_lb1","select '第1个表'; select '第二个表'", "result")

至少应该这样才可能出结果:
SQLEXEC(con,"EXEC sb_query ?cs_sb_bm,?cs_lb1; select '第2个表'; select '第三个表'", "result")

再说了,返回多个结果集的功能应该是在你的 sb_query 中实现,而不是由调用方决定,例如
sql server 端:
程序代码:
CREATE PROCEDURE sb_query
    @c_sb_bm NVARCHAR(30),
    @c_lb1 NVARCHAR(30)
AS
BEGIN
    SELECT * FROM shebei
    WHERE sb_bm=@c_sb_bm and zl_id in (select id from shebei_zl where lb1=@c_lb1);
    /* 再加上其他需要同时返回的查询结果 */
    select getdate();
    select newid();
END

vfp端:
程序代码:
cs_sb_bm="zhijiang"
cs_lb1="mijiu"
SQLEXEC(con,"EXEC sb_query ?cs_sb_bm,?cs_lb1", "result")
*- 当然,这样也是可以的,只是执行效率会比在存储过程中完成差很多
*-- SQLEXEC(con,"EXEC sb_query ?cs_sb_bm,?cs_lb1; select '第n个表'; select '第n+1个表'", "result")




[此贴子已经被作者于2024-6-10 17:46编辑过]


这家伙很懒,啥也没留下
2024-06-10 17:44
快速回复:请教关于VFP执行SQL SERVER有参数的存储过程
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019789 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved