这两天在做一个查询的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#)
分享到:
相关推荐
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()函数;用表函数;使用临时表
使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据。 代码示例: 此例子为控制台输出程序,有两个类,一个为BulkData类,主要实现了表值参数和sql...
考虑使用表变量而不使用临时表。当需要在临时表上显式地创建索引时,或多个存储过程或函数需要使用表值时,临时表很有用。通常,表变量提供更有效的查询处理。
当会话退出或者用户提交commit和回滚rollback事务的时候,临时表的数据自动清空,但是临时表的结构以及元数据还存储在用户的数据字典中。 2.详细介绍 Oracle临时表分为会话级临时表和事务级临时表。 会话级临时表是...
书中还讲述了其他几种争议较多的构造(camstruct)——如临时表、动态执行、XML和.NET集成——它们在具有强大功能的同时,也具有极大的风险。 本书适合于需要编写或检查T-SQL代码的有经验的T-SQL程序员和数据库...
因此计划先把数据转插入一个临时表,再对临时表的数据进行分析。 问题点是如何动态创建临时表。原先Insus.NET使用下面代码实现: 代码如下: DECLARE @s NVARCHAR(MAX) = ‘ IF OBJECT_ID(”[dbo].[#Tb]”) IS NOT ...
目录 致谢 引言 第1章 T-SQL查询和编程基础 1.1 理论背景 1.2 SQL SERVER体系结构 ... 1.3 创建表和定义数据完整性 ... 10.5 临时表 10.6 动态SQL 10.7 例程 10.8 错误处理 10.9 总结
│ │ 5.4.1 查询已用编号分布情况的示例(临时表法).sql │ │ 5.4.1 查询已用编号分布情况的示例(子查询法).sql │ │ 5.4.2 查询缺号分布情况的示例.sql │ │ 5.4.3 返回已用编号、缺号分布字符串的处理示例....
sql plsql 函数学习 Oracle 快速入门 有关表的操作 运算符 常用 ORACLE 函数(日期函数、字符函数、数字函数、转换函数、分组函数、其他函数……) 临时表 join SEQUENCE 同义词 等等
全书分为23章,涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、...
VFP操控SQLSERVER数据库,实现临时表与服务器端同步添加、修改等
全书分为23章,涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、...
全书分为23章,涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、...
全书分为23章,涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、...
5.4.1 查询已用编号分布情况的示例(临时表法).sql │ │ 5.4.1 查询已用编号分布情况的示例(子查询法).sql │ │ 5.4.2 查询缺号分布情况的示例.sql │ │ 5.4.3 返回已用编号、缺号分布字符串的处理...
本套教程重点讲解的内容包括:sql语法基础、组合查询、去除重复、聚合函数、子查询、临时表、存储过程、触发器、游标、事务回滚、事务并发控制、约束等技术,希望通过通过本套教程的学习,最终提升你的数据处理...
使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样可以省去很多自定义的代码。这样的操作对于存储过程内基于表函数的操作变得非常容易操作。 表...
亲,本人纯手工添加了书签哦!!方便阅读 《Microsoft SQL Server 2008技术内幕:T-SQL语言基础》是Microsoft...10.5 临时表 10.6 动态SQL 10.7 例程 10.8 错误处理 10.9 总结 附录A SQL SERVER使用入门 索引
查询出的结果 称之为 临时表 我们可以订制临时表有那些列 14.查询的时候 可以给 表 或者 列 起别名 Select 列名1 [as] 别名 , 列名2 [as] 别名2 from 表名 别名 15.去重查询 16.条件查询 练习1 年龄大于 25的...