`
357029540
  • 浏览: 726388 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

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#)
分享到:
评论

相关推荐

    原创sql存储过程函数范例

    2010-04-11 12:33 147 临时表的创建使用.sql 2010-04-11 12:06 293 函数返回table.sql 2009-08-31 12:30 664 函数返回变量以及table.sql 2009-09-16 17:34 182 创建视图.sql 2009-08-31 14:00 720 存储过程-函数创建...

    取代游标的方案:使用min()函数或max()函数;用表函数;使用临时表

    取代游标的方案:使用min()函数或max()函数;用表函数;使用临时表

    sql下三种批量插入数据的方法

    使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据。  代码示例:  此例子为控制台输出程序,有两个类,一个为BulkData类,主要实现了表值参数和sql...

    sql server 临时表 查找并删除的实现代码

    考虑使用表变量而不使用临时表。当需要在临时表上显式地创建索引时,或多个存储过程或函数需要使用表值时,临时表很有用。通常,表变量提供更有效的查询处理。

    对比Oracle临时表和SQL Server临时表的不同点

    当会话退出或者用户提交commit和回滚rollback事务的时候,临时表的数据自动清空,但是临时表的结构以及元数据还存储在用户的数据字典中。 2.详细介绍 Oracle临时表分为会话级临时表和事务级临时表。 会话级临时表是...

    Microsoft_SQL_Server_2005技术内幕:T-SQL查询.pdf

     书中还讲述了其他几种争议较多的构造(camstruct)——如临时表、动态执行、XML和.NET集成——它们在具有强大功能的同时,也具有极大的风险。  本书适合于需要编写或检查T-SQL代码的有经验的T-SQL程序员和数据库...

    sqlserver 动态创建临时表的语句分享

    因此计划先把数据转插入一个临时表,再对临时表的数据进行分析。 问题点是如何动态创建临时表。原先Insus.NET使用下面代码实现: 代码如下: DECLARE @s NVARCHAR(MAX) = ‘ IF OBJECT_ID(”[dbo].[#Tb]”) IS NOT ...

    Microsoft SQL Server 2005技术内幕:T-SQL查询

    目录 致谢 引言 第1章 T-SQL查询和编程基础  1.1 理论背景  1.2 SQL SERVER体系结构 ... 1.3 创建表和定义数据完整性 ... 10.5 临时表  10.6 动态SQL  10.7 例程  10.8 错误处理  10.9 总结

    经典SQL脚本大全

    │ │ 5.4.1 查询已用编号分布情况的示例(临时表法).sql │ │ 5.4.1 查询已用编号分布情况的示例(子查询法).sql │ │ 5.4.2 查询缺号分布情况的示例.sql │ │ 5.4.3 返回已用编号、缺号分布字符串的处理示例....

    sql plsql 函数学习 Oracle 快速入门

    sql plsql 函数学习 Oracle 快速入门 有关表的操作 运算符 常用 ORACLE 函数(日期函数、字符函数、数字函数、转换函数、分组函数、其他函数……) 临时表 join SEQUENCE 同义词 等等

    SQL应用开发范例宝典:SQL应用开发范例宝典.iso (源码光盘)

    全书分为23章,涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、...

    VFP_控制_SQL_SERVER数据库的自定义函数集目录

    VFP操控SQLSERVER数据库,实现临时表与服务器端同步添加、修改等

    SQL_SERVER应用与开发范例宝典_12357672.part3

    全书分为23章,涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、...

    SQL_SERVER应用与开发范例宝典_12357672.part2

    全书分为23章,涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、...

    SQL_SERVER应用与开发范例宝典_12357672.part1

    全书分为23章,涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、...

    Sqlserver2000经典脚本

    5.4.1 查询已用编号分布情况的示例(临时表法).sql │ │ 5.4.1 查询已用编号分布情况的示例(子查询法).sql │ │ 5.4.2 查询缺号分布情况的示例.sql │ │ 5.4.3 返回已用编号、缺号分布字符串的处理...

    夜鹰全新sql2008高级视频教程

     本套教程重点讲解的内容包括:sql语法基础、组合查询、去除重复、聚合函数、子查询、临时表、存储过程、触发器、游标、事务回滚、事务并发控制、约束等技术,希望通过通过本套教程的学习,最终提升你的数据处理...

    SQL Server存储过程中使用表值作为输入参数示例

    使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样可以省去很多自定义的代码。这样的操作对于存储过程内基于表函数的操作变得非常容易操作。 表...

    (第一卷)Microsoft.SQL.Server.2008技术内幕:T-SQL语言基础

    亲,本人纯手工添加了书签哦!!方便阅读  《Microsoft SQL Server 2008技术内幕:T-SQL语言基础》是Microsoft...10.5 临时表 10.6 动态SQL 10.7 例程 10.8 错误处理 10.9 总结 附录A SQL SERVER使用入门 索引

    SQL语句大全.docx

    查询出的结果 称之为 临时表 我们可以订制临时表有那些列 14.查询的时候 可以给 表 或者 列 起别名 Select 列名1 [as] 别名 , 列名2 [as] 别名2 from 表名 别名 15.去重查询 16.条件查询 练习1 年龄大于 25的...

Global site tag (gtag.js) - Google Analytics