游标 sqlserver-存储过程创建临时表(表名是动态的),游标中使用了这一个临时表

问题描述

存储过程创建临时表(表名是动态的),游标中使用了这一个临时表

ALTER PROCEDURE [dbo].[P_GetBusLocation]
@Date1 datetime
AS
BEGIN
SET NOCOUNT ON;
declare @VehicleNo nvarchar(50),@VGroupID int,@RouteNumber varchar(200),@TableName varchar(50),@VehicleID bigint ,
@OldVehicleID bigint,@SqlStr1 varchar(1024),@SqlStr2 varchar(1024),@TemTableName varchar(50),@SqlStr3 varchar(1024)
set @TableName = 'gps005' + CONVERT(varchar(20), @Date1, 112)
set @TemTableName = '#Tem' + @TableName
set @SqlStr1 = 'create Table ' + @TemTableName+'(GpsDateTime datetime,VehicleID bigint,VehicleNo nvarchar(50),RouteNumber varchar(200),Flag tinyint
,Longitude decimal(9,6),Latitude decimal(8,6),Speed decimal(4,1),Direction smallint,Mileage bigint
,Position varchar(200),AvgSpeed decimal(4,1),StorageTime datetime)'
exec(@SqlStr1)

set @SqlStr2 = 'insert into '+@TemTableName+' select t1.GpsDateTime,t1.VehicleID,null,null,t1.Flag
,t1.Longitude,t1.Latitude,t1.Speed,t1.Direction,t1.Mileage,t1.Position,t1.AvgSpeed,t1.StorageTime from '+@TableName +' as t1'

exec(@SqlStr2)

set @OldVehicleID = 0
set @SqlStr3 = 'declare myCursor cursor FORWARD_ONLY STATIC for select VehicleID from '+@TemTableName
exec(@SqlStr3)
open myCursor
fetch next from myCursor into @VehicleID
while(@@FETCH_STATUS = 0)
begin

if(@VehicleID != @OldVehicleID)
begin
select @VGroupID = VGroupID,@VehicleNo = VehicleLic from VehicleInfo where VehicleID = @VehicleID
select @RouteNumber = RouteNumber FROM RouteInfo where VGroupID = @VGroupID
exec('update '+@TemTableName+' set VehicleNo = '+@VehicleNo+',RouteNumber = '+@RouteNumber+' where VehicleID = '+@VehicleID)
set @OldVehicleID = @VehicleID
end
fetch next from myCursor into @VehicleID
end
exec('select * from '+ @TemTableName)
close myCursor
deallocate myCursor
END

入参是:2013-8-8
下面是报错:
消息 208,级别 16,状态 0,第 1 行
对象名 '#Temgps00520130808' 无效。
消息 208,级别 16,状态 0,第 1 行
对象名 '#Temgps00520130808' 无效。
消息 16916,级别 16,状态 1,过程 P_GetBusLocation,第 35 行
名为 'myCursor' 的游标不存在。
消息 16916,级别 16,状态 1,过程 P_GetBusLocation,第 38 行
名为 'myCursor' 的游标不存在。
消息 28102,级别 16,状态 1,过程 P_GetBusLocation,第 39 行
批处理执行由于调试器请求而终止。

时间: 2024-11-08 06:29:17

游标 sqlserver-存储过程创建临时表(表名是动态的),游标中使用了这一个临时表的相关文章

sql语句-SQL语句创建的表不在新建的数据库中而在系统数据库中,

问题描述 SQL语句创建的表不在新建的数据库中而在系统数据库中, SQL语句创建的表不在新建的数据库中而在系统数据库中, 怎么让表在新建的数据库呢 解决方案 肯定你写错了,或者数据库连接到了系统库,或者sql中指明了写到系统库了 解决方案二: 你没写 use database; database是你的数据库 解决方案三: 创建表前,先写需要创建在哪个数据库中.USE DATABASE GO......CREATE TABLENAME() 解决方案四: 先要使用自己的数据库 use databas

Excel如何批量创建工作表名

  Excel批量创建表名步骤如下: 具体操作如下:例如下图中,创建表名区域,点击"插入-数据透视表".(下图1处) 点击"确定"后,在数据透视表字段,将"表名"字段拖拽至筛选器处.(下图2处) 然后点击"数据透视表工具-分析-选项"的下拉框,选择"显示报表筛选页".(下图3处) 点击"确定"后,系统自动生成1月到12月的表名.

sqlserver 修改列名及表名的sql语句_MsSql

代码如下: EXEC sp_rename '表名.[原列名]', '新列名', 'column' Transact-SQL 参考 sp_rename 更改当前数据库中用户创建对象(如表.列或用户定义数据类型)的名称. 语法 sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' [ , [ @objtype = ] 'object_type' ] 参数 [@objname =] 'object_name' 是用户对象(

sqlserver 修改列名及表名的sql语句

代码如下: EXEC sp_rename '表名.[原列名]', '新列名', 'column' Transact-SQL 参考 sp_rename 更改当前数据库中用户创建对象(如表.列或用户定义数据类型)的名称. 语法 sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' [ , [ @objtype = ] 'object_type' ] 参数 [@objname =] 'object_name' 是用户对象(

sqlserver 各种判断是否存在(表名、函数、存储过程等)_MsSql

sql server中如何判断表或者数据库的存在,但在实际使用中,需判断Status状态位:其中某些状态位可由用户使用 sp_dboption(read only.dbo use only.single user 等)进行设置: 1 = autoclose:使用 sp_dboption 设置. 数据库完全关闭,其资源在最后一个用户注销后释放.4 = select into/bulkcopy:使用 sp_dboption 设置.允许使用 Select INTO 语句和快速大容量复制.8 = tru

sqlserver 各种判断是否存在(表名、函数、存储过程等)

sql server中如何判断表或者数据库的存在,但在实际使用中,需判断Status状态位:其中某些状态位可由用户使用 sp_dboption(read only.dbo use only.single user 等)进行设置: 1 = autoclose:使用 sp_dboption 设置. 数据库完全关闭,其资源在最后一个用户注销后释放.4 = select into/bulkcopy:使用 sp_dboption 设置.允许使用 Select INTO 语句和快速大容量复制.8 = tru

oracle存储过程创建表分区实例_oracle

用存储过程创建数据表:创建时注意必须添加authid current_user,如果创建的表已存在,存储过程继续执行,但如不不加此关键语句,存储过程将出现异常,这个语句相当于赋权限.例1创建语句如下: 复制代码 代码如下: create or replaceprocedure sp_create_mnl(i_id varchar2) authid current_user  as   /********************************* 名称:sp_create_mnl 功能描述

oracle 存储过程创建表分区二种方法

用存储过程创建数据表: 创建时注意必须添加authid current_user ,如果创建的表已存在,存储过程继续执行,但如不不加此关键语句,存储过程将出现异常, 这个语句相当于赋权限. 例1 创建语句如下:  代码如下 复制代码 create or replace procedure sp_create_mnl(i_id varchar2) authid current_user  as   /********************************* 名称:sp_create_mn

mysql创建数据表与删除数据表

创建数据表利用 命令:create table <表名> ( <字段名1> <类型1> [,..<字段名n> <类型n>]); 语法:CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]  [table_options] [select_statement]  例  代码如下 复制代码 mysql> create table MyClass(