SQL函数返回临时表结构的数据用于查询

这两天在做一个查询的SQL,这个SQL的一个条件是通过游标实现另外两张表查询出一个多条数据,这些数据都是INT类型,然后用IN条件进行查询,并且查询这两张表需要通过外部传入参数才能查询出所需数据,于是想到了用SQL函数返回值,并且也这样做了,由于是返回多条数据,所以把查询出来的INT类型值都拼接为了字符串,这时就遇到问题了,在查询SQL中因为条件是INT值,SQL函数的CAST和CONVERST都是不能把形如‘1,2,3’的字符串转换为INT的,目前没有想到怎么把形如‘1,2,3’的值用于INT类型 IN ()的方法,所以也在网上找了好多资料,后来就找到了用SQL函数返回表结构的数据来满足INT值的条件。

具体实现的SQL如下所示:



CREATE FUNCTION [dbo].[PURCHASE_GROUP]
(
@PURCHASE_MANAGER_ID INT--传入参数
)
RETURNS @T_GROUP TABLE(GROUP_ID INT)--返回临时表结构
AS
BEGIN

--定义第一个游标用于查询值
DECLARE PURCHASE_CHARGE_GROUP_CURSOR CURSOR FOR
SELECT
REQUEST_GROUP_DESC
FROM
PURCHASE_CHARGE_GROUP
WHERE
PURCHASE_MANAGER_ID = @PURCHASE_MANAGER_ID;
DECLARE
@GROUP_ID_STR VARCHAR(8000),
@GROUP_DESC VARCHAR(200),
@GROUP_ID INT;

--赋初始值
SET @GROUP_ID_STR = '';
SET @GROUP_DESC = '';
SET @GROUP_ID = '';
--打开游标
OPEN PURCHASE_CHARGE_GROUP_CURSOR;

--第一次取值到变量
FETCH NEXT FROM PURCHASE_CHARGE_GROUP_CURSOR INTO @GROUP_DESC;

--循环第一个游标
WHILE @@FETCH_STATUS = 0
BEGIN

--定义第二个游标,因为要用到第一个游标返回的变量,所以定义在这里
DECLARE FND_GROUP_CURSOR CURSOR FOR
SELECT
GROUP_ID
FROM
FND_GROUP
WHERE
GROUP_DESC LIKE;

--打开第二个游标
OPEN FND_GROUP_CURSOR;
SET @GROUP_ID = -1;

--第一次取第二个游标的值
FETCH NEXT FROM FND_GROUP_CURSOR INTO @GROUP_ID;

--循环第二个游标
WHILE @@FETCH_STATUS = 0
BEGIN

--插入临时表值
INSERT INTO @T_GROUP(GROUP_ID) VALUES (@GROUP_ID)

--下次循环第二个游标的值
FETCH NEXT FROM FND_GROUP_CURSOR INTO @GROUP_ID;
END;

--关闭第二个游标
CLOSE FND_GROUP_CURSOR;

--销毁第二个游标
DEALLOCATE FND_GROUP_CURSOR;

--下次循环第一个游标的值
FETCH NEXT FROM PURCHASE_CHARGE_GROUP_CURSOR INTO @GROUP_DESC;
END;

--关闭第一个游标
CLOSE PURCHASE_CHARGE_GROUP_CURSOR;

--销毁第一个游标
DEALLOCATE PURCHASE_CHARGE_GROUP_CURSOR;
RETURN ;
END;



查询临时表的数据

SELECT GROUP_ID FROM [dbo].[PURCHASE_GROUP](#purchaseManagerId#)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值