mssql 游标有感

无意间了解到MSSQL的游标,知道了一种情况下需要使用游标。举例如下:

一、情况1

有两张表:表A、表B,关系为 表A  1——>* 表B

如果要求查出和表A数据列一一对应的所有表B的数据列时,这个时候就需要使用游标来查询。

伪代码:

 1 var tempitem=new List<TableBItem>();//用于存储查询出的所有表B的数据列
 2 
 3 var parmarykeylist=new List<int>();
 4 
 5 parmarykeylist=TableA.GetParmaryKeyList();获取表A的主键List。
 6 
 7 foreach(var k in parmarykeylist)根据表A的主键查询所有该组键对应的表B的Item
 8 
 9 {
10 
11    tempitem.Add(TableB.Where(b=>b.tableAParmaryKey==k).ToList());
12 
13 }
14 return tempitem;

相对于mssql中:

第三行代码相当于创建游标

第五行相当于为游标循环填充循环数据

 

PS:其实此种情况也可以通过 APPLY运算符来实现,关于APPLY在SQLServer 2005帮助中的讲解如下:

使用 APPLY 运算符可以为实现查询操作的外部表表达式返回的每个行调用表值函数。表值函数作为右输入,外部表表达式作为左输入。通过对右输入求值来获得左输入每一行的计算结果,生成的行被组合起来作为最终输出。APPLY 运算符生成的列的列表是左输入中的列集,后跟右输入返回的列的列表。
 
APPLY 有两种形式: CROSS APPLY OUTER APPLYCROSS APPLY 仅返回外部表中通过表值函数生成结果集的行。OUTER APPLY 既返回生成结果集的行,也返回不生成结果集的行,其中表值函数生成的列中的值为 NULL
 
SELECT *
FROM TableA AS A
 CROSS APPLY fn_getBbyA(A.primaryID) AS B
其中:
fn_getBbyA()表值函数
 
 

如有问题,请多多指教。

相关文章

本篇内容主要讲解“sqlalchemy的常用数据类型怎么使用”,感...
今天小编给大家分享一下sqlServer实现分页查询的方式有哪些的...
这篇文章主要介绍“sqlmap之osshell怎么使用”,在日常操作中...
本篇内容介绍了“SQL注入的知识点有哪些”的有关知识,在实际...
1. mssql权限sa权限:数据库操作,文件管理,命令执行,注册...
sql执行计划如何查看?在SPL庞大的数据中我们不知道如何查看...