资源描述:
《sql srever如何创建和使用动态游标--》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、SQLSREVER如何创建和使用动态游标>> 创建游标CREATEPROCEDUREUsp_CreateCursor(Select_mandvarchar(8000),Cursor_ReturnCURSORVARYINGOUTPUT)AS/*存储过程名称:Usp_CreateCursor 功能描述: 根据指定的SELECT创建一个动态游标 参数描述: Select_mand---SELECT语句;Cursor_Return---要返回的游标变量 思路: 动态游标的关键是不知如何去构造它的SELECT语句,因为SELECT是个字符串表量,定义时不能直接用它,但它可以于表。
2、 所以我的目的就是创建一个统一的表,从中取数据不就可以了。建表有一定的语法规则,所以就应该根据栏位列表生成相应的 格式,这个可以从系统表中获取。关键的问题是如何将数据插入到临时表,我摸索出一条语句可 实现这个功能,那就是INSERTINTO<TABLE_NAME>EXECUTE<SQL>,而SQL7.0的帮助未讲。有表有数据就可以创建了。 创建人: 康剑民 创建日期: 2001-07-11*/DeclareSelect_mand_TempVarchar(8000),---存放SELECT临时语法 Tabl
3、e_Listvarchar(255),---存放表的列表 Column_Listvarchar(8000),---存放栏位列表 Table_Namevarchar(30),---存放单独表名 Column_Namevarchar(30),---存放单独栏位名(但有可能是*) Column_Syntaxvarchar(8000),---存放栏位建表时的语法(综合) Column_Name_Tempvarchar(30),---存放栏位名称 Column_Type_Tempvarchar(30),----存放栏位类型 Column_Syntax
4、_Tempvarchar(8000),---存放栏位建表时的语法(单个) Column_Length_Tempint,---存放栏位长度 Column_Xprec_Tempint,---存放栏位精度 Column_Xscale_Tempint,---存放栏位小数位数 From_Posint,---存放from的位置 n_Countint,---存放栏位总数 Loop_Seqint---循环步进变量 ---创建临时表CreateTable#Test(aint)---如果传来的SELECT语句不是以'select'开头,自动修改If
5、Left(Lo(Select_mand)),6)<>'select'SelectSelect_mand='Select'+Select_mand---将开头SELECT去掉SelectSelect_mand_Temp=Lo(Select_mand))IfLeft(Select_mand_Temp,6)='select'SelectSelect_mand_Temp=Right(Select_mand_Temp,Len(Select_mand_Temp)-7)---取各保留字位置,以便获得表的列表SelectFrom_Pos=
6、CHARINDEX('from',Select_mand_Temp)Selectp)SelectHaving_Pos=CHARINDEX('having',Select_mand_Temp)SelectGroupby_Pos=CHARINDEX('groupby',Select_mand_Temp)SelectOrderby_Pos=CHARINDEX('orderby',Select_mand_Temp) Ifp_Pos=p_PosSelectTemp_Pos=Having_PosIfGroupby_Pos>
7、0AndGroupby_Pos<Temp_PosSelectTemp_Pos=Groupby_PosIfOrderby_Pos>0AndOrderby_Pos<Temp_PosSelectTemp_Pos=Orderby_Pos---取表列表IfTemp_Pos>0 Begin SelectTable_List=SUBSTRING(Select_mand_Temp,From_Pos+6,Temp_Pos-From_Pos-1) EndElse