当前位置: 代码迷 >> SQL >> SQL函数返回暂时表结构的数据用于查询
  详细解决方案

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

热度:39   发布时间:2016-05-05 10:33:00.0
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#)
  相关解决方案