您的位置:首页 > 数据库

SQLSREVER如何创建和使用动态游标

2008-04-28 11:32 267 查看
CREATEPROCEDUREUsp_CreateCursor(@Select_Commandvarchar(8000),@Cursor_ReturnCURSORVARYINGOUTPUT)AS
/*存储过程名称:Usp_CreateCursor
功能描述: 根据指定的SELECT创建一个动态游标
参数描述: @Select_Command---SELECT语句;@Cursor_Return---要返回的游标变量
思路: 动态游标的关键是不知如何去构造它的SELECT语句,因为SELECT是个字符串表量,定义时不能直接用它,但它可以来源于表。
所以我的目的就是创建一个统一的表,从中取数据不就可以了。建表有一定的语法规则,所以就应该根据栏位列表生成相应的
格式,这个可以从系统表中获取。关键的问题是如何将数据插入到临时表,我摸索出一条语句可
实现这个功能,那就是INSERTINTO<TABLE_NAME>EXECUTE<SQL>,而SQL7.0的帮助未讲。有表有数据就可以创建了。
创建人: 康剑民
创建日期: 2001-07-11
*/
Declare@Select_Command_TempVarchar(8000),---存放SELECT临时语法
@Table_Listvarchar(255),---存放表的列表
@Column_Listvarchar(8000),---存放栏位列表
@Table_Namevarchar(30),---存放单独表名
@Column_Namevarchar(30),---存放单独栏位名(但有可能是*)
@Column_Syntaxvarchar(8000),---存放栏位建表时的语法(综合)
@Column_Name_Tempvarchar(30),---存放栏位名称
@Column_Type_Tempvarchar(30),----存放栏位类型
@Column_Syntax_Tempvarchar(8000),---存放栏位建表时的语法(单个)
@Column_Length_Tempint,---存放栏位长度
@Column_Xprec_Tempint,---存放栏位精度
@Column_Xscale_Tempint,---存放栏位小数位数
@From_Posint,---存放from的位置
@Where_Posint,---存放where的位置
@Having_Posint,---存放having的位置
@Groupby_Posint,---存放groupby的位置
@Orderby_Posint,---存放orderby的位置
@Temp_Posint,---临时变量
@Column_Countint,---存放栏位总数
@Loop_Seqint---循环步进变量
---创建临时表
CreateTable#Test(aint)
---如果传来的SELECT语句不是以'select'开头,自动修改
IfLeft(Lower(Ltrim(@Select_Command)),6)<>'select'Select@Select_Command='Select'+@Select_Command1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: