无意间了解到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 APPLY。CROSS APPLY 仅返回外部表中通过表值函数生成结果集的行。OUTER APPLY 既返回生成结果集的行,也返回不生成结果集的行,其中表值函数生成的列中的值为 NulL。 SELECT *FROM tableA AS ACROSS APPLY fn_getBbyA(A.primaryID) AS B
其中:
fn_getBbyA()为表值函数 详细代码请看:http://www.soaspx.com/dotnet/sql/mssql/sql2005/sqlservr2005_20120421_8995.html
如有问题,请多多指教。
总结以上是内存溢出为你收集整理的mssql 游标有感全部内容,希望文章能够帮你解决mssql 游标有感所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)