关于存储过程中临时表的问题

oldabc 2008-12-22 05:15:12

CREATE PROCEDURE sp_transport_ttl2_yxh
@s_project varchar(30),
@s_vihicleno varchar(10),
@s_dt1 datetime,
@s_dt2 datetime

AS
CREATE TABLE #temp_transport_ttl_yxh
(
deliveryno varchar(20) ,
trucker varchar(30) null,
cishu integer default 0,
sum_volume integer default 0,
jiazhi integer default 0,
chaoshi integer default 0,
)
INSERT INTO #temp_transport_ttl_yxh
(deliveryno,trucker,cishu,sum_volume,chaoshi)
SELECT
ikea_delivery.delivery_no ,
(ikea_delivery.trucker+' '+ikea_delivery.vihicle_no) as '司机\车牌号',
sum(case when ikea_delivery.waybill_date between @s_dt1 and @s_dt2 then 1 else 0 end) as '送货次数',
sum(ikea_delivery.sum_volume) as '总运输体积',
--case when ikea_delivery.vihicle_no = @s_vihicleno then ikea_delivery.sum_volume else 0 end) as '总运输体积',
sum(case when ikea_delivery.flag7_dt_todoor > ikea_delivery.pre_send_date then 1 else 0 end) as '送货超时次数'
FROM ikea_delivery
WHERE
ikea_delivery.project= @s_project AND
((ikea_delivery.vihicle_no = @s_vihicleno AND @s_vihicleno <> '全部') OR (@s_vihicleno = '全部' ))AND
(ikea_delivery.waybill_date between @s_dt1 and @s_dt2)
GROUP BY ikea_delivery.delivery_no ,
(ikea_delivery.trucker+' '+ikea_delivery.vihicle_no)

declare @s_jiazhi decimal(18,2)
declare @s_deliveryno varchar(20)
declare @li_cursor_rows_1 integer, @i integer
select @i = 1
declare cursor_temp scroll cursor for select deliveryno from #temp_transport_ttl_yxh
open cursor_temp
select @li_cursor_rows_1 = @@cursor_rows
while @i<= @li_cursor_rows_1
begin
fetch absolute @i from cursor_temp into @s_deliveryno
if @@fetch_status <> 0 break
select @s_jiazhi = Sum( ikea_delivery_detail.amount ) from ikea_delivery_detail where ikea_delivery_detail.delivery_no =@s_deliveryno
if @s_jiazhi is null select @s_jiazhi = 0
update #temp_transport_ttl_yxh
set jiazhi=@s_jiazhi
where deliveryno = @s_deliveryno

select @i = @i + 1
end
close cursor_temp
deallocate cursor_temp

select * from #temp_transport_ttl_yxh
drop table #temp_transport_ttl_yxh
GO




上面的代码不用看太仔细。我只想问 我建的临时表#temp_transport_ttl_yxh


SELECT
ikea_delivery.delivery_no ,
(ikea_delivery.trucker+' '+ikea_delivery.vihicle_no) as '司机\车牌号',
sum(case when ikea_delivery.waybill_date between @s_dt1 and @s_dt2 then 1 else 0 end) as '送货次数',
sum(ikea_delivery.sum_volume) as '总运输体积',
--case when ikea_delivery.vihicle_no = @s_vihicleno then ikea_delivery.sum_volume else 0 end) as '总运输体积',
sum(case when ikea_delivery.flag7_dt_todoor > ikea_delivery.pre_send_date then 1 else 0 end) as '送货超时次数'


是不是这样一SELECT完 数据就自动进入临时表里了啊

小弟新手! 别笑话

...全文
85 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
happycat1029 2008-12-23
  • 打赏
  • 举报
回复
没有问题。其实你执行完后可以查看下的
smry 2008-12-23
  • 打赏
  • 举报
回复
临时表的我的常用的两种使用
1、select into

if object_id ('tempdb..#a') is not null drop table #a
select 1 as a,4 as b into #a
select * from #a

2、insert into
select

if object_id ('tempdb..#a') is not null drop table #a
create table #a(a int,b int )

--insert into #a(a,b)/*可以列示*/
insert into #a/*可以不列示*/

select 1,4
select * from #a
accpyy 2008-12-23
  • 打赏
  • 举报
回复
套用语句:
select * into #临时表
oldabc 2008-12-22
  • 打赏
  • 举报
回复
into #temp 加在我那个位置也可以吧
dawugui 2008-12-22
  • 打赏
  • 举报
回复
SELECT
ikea_delivery.delivery_no ,
(ikea_delivery.trucker+' '+ikea_delivery.vihicle_no) as '司机\车牌号',
sum(case when ikea_delivery.waybill_date between @s_dt1 and @s_dt2 then 1 else 0 end) as '送货次数',
sum(ikea_delivery.sum_volume) as '总运输体积',
--case when ikea_delivery.vihicle_no = @s_vihicleno then ikea_delivery.sum_volume else 0 end) as '总运输体积',
sum(case when ikea_delivery.flag7_dt_todoor > ikea_delivery.pre_send_date then 1 else 0 end) as '送货超时次数'
into #temp --这里加
from tb

另:临时表只在一次会话中起作用.

临时表
可以创建本地和全局临时表。本地临时表仅在当前会话中可见;全局临时表在所有会话中都可见。

本地临时表的名称前面有一个编号符 (#table_name),而全局临时表的名称前面有两个编号符 (##table_name)。

SQL 语句使用 CREATE TABLE 语句中为 table_name 指定的名称引用临时表:

CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)
INSERT INTO #MyTempTable VALUES (1)

如果本地临时表由存储过程创建或由多个用户同时执行的应用程序创建,则 SQL Server 必须能够区分由不同用户创建的表。为此,SQL Server 在内部为每个本地临时表的表名追加一个数字后缀。存储在 tempdb 数据库的 sysobjects 表中的临时表,其全名由 CREATE TABLE 语句中指定的表名和系统生成的数字后缀组成。为了允许追加后缀,为本地临时表指定的表名 table_name 不能超过 116 个字符。

除非使用 DROP TABLE 语句显式除去临时表,否则临时表将在退出其作用域时由系统自动除去:

当存储过程完成时,将自动除去在存储过程中创建的本地临时表。由创建表的存储过程执行的所有嵌套存储过程都可以引用此表。但调用创建此表的存储过程的进程无法引用此表。


所有其它本地临时表在当前会话结束时自动除去。


全局临时表在创建此表的会话结束且其它任务停止对其引用时自动除去。任务与表之间的关联只在单个 Transact-SQL 语句的生存周期内保持。换言之,当创建全局临时表的会话结束时,最后一条引用此表的 Transact-SQL 语句完成后,将自动除去此表。
在存储过程或触发器中创建的本地临时表与在调用存储过程或触发器之前创建的同名临时表不同。如果查询引用临时表,而同时有两个同名的临时表,则不定义针对哪个表解析该查询。嵌套存储过程同样可以创建与调用它的存储过程所创建的临时表同名的临时表。嵌套存储过程中对表名的所有引用都被解释为是针对该嵌套过程所创建的表,例如:

CREATE PROCEDURE Test2
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (2)
SELECT Test2Col = x FROM #t
GO
CREATE PROCEDURE Test1
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (1)
SELECT Test1Col = x FROM #t
EXEC Test2
GO
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (99)
GO
EXEC Test1
GO

下面是结果集:

(1 row(s) affected)

Test1Col
-----------
1

(1 row(s) affected)

Test2Col
-----------
2

当创建本地或全局临时表时,CREATE TABLE 语法支持除 FOREIGN KEY 约束以外的其它所有约束定义。如果在临时表中指定 FOREIGN KEY 约束,该语句将返回警告信息,指出此约束已被忽略,表仍会创建,但不具有 FOREIGN KEY 约束。在 FOREIGN KEY 约束中不能引用临时表。

考虑使用表变量而不使用临时表。当需要在临时表上显式地创建索引时,或多个存储过程或函数需要使用表值时,临时表很有用。通常,表变量提供更有效的查询处理

xieyueqing 2008-12-22
  • 打赏
  • 举报
回复
刚才没看清,你前面有Insert 语句,好像没有问题。
oldabc 2008-12-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liangCK 的回复:]
这么长?.帮顶.
[/Quote]

问题很简单的 根本不用看代码的。 就是基础问题 概念模糊
xieyueqing 2008-12-22
  • 打赏
  • 举报
回复
不是,临时表的用法跟正式表一模一样的,该怎么写还是怎么写.
liangCK 2008-12-22
  • 打赏
  • 举报
回复
这么长?.帮顶.
第一篇 Oracle管理配置 第1章 Oracle安装配置(教学视频:10分钟) 23 1.1 Oracle简介 23 1.1.1 数据库术语 23 1.1.2 主流数据库简介 24 1.1.3 Oracle数据库的特点 24 1.2 安装Oracle数据库 25 1.2.1 Oracle数据库的版本变迁及安装环境 25 1.2.2 安装过程 26 1.2.3 安装需要注意的问题 27 1.3 本章小结 28 1.4 习题 28 第2章 Oracle常用工具(教学视频:7分钟) 29 2.1 Net Configuration Assistant(网络配置助手) 29 2.1.1 监听程序配置 29 2.1.2 命名方法配置 31 2.1.3 本地Net服务名配置 32 2.2 Net Manager(网络管理员) 34 2.3 本章实例 36 2.4 本章小结 38 2.5 习题 38 第3章 SQL Plus和PL/SQL(教学视频:11分钟) 39 3.1 SQL Plus与PL/SQL简介 39 3.2 使用SQL Plus 40 3.2.1 登录SQL Plus 40 3.2.2 SQL Plus输出结果的格式化 41 3.2.3 SQL Plus小结 46 3.3 PL/SQL 46 3.3.1 PL/SQL常用开发工具 46 3.3.2 开发一个简单的PL/SQL程序 48 3.4 本章实例 49 3.5 本章小结 50 3.6 习题 50 第二篇 Oracle数据库对象 第4章 Oralce数据库(教学视频:15分钟) 51 4.1 创建Oracle数据库 51 4.2 Oracle数据库的相关术语 52 4.2.1 数据库 53 4.2.2 数据库实例和SID 53 4.2.3 ORACLE_SID 54 4.3 Oracle数据库的备份与恢复 55 4.3.1 逻辑备份/恢复(导出/导入) 55 4.3.2 物理备份/恢复 56 4.3.3 利用PL/SQL Developer备份数据库 60 4.4 本章实例 61 4.5 本章小结 61 4.6 习题 62 第5章 Oracle数据表对象(教学视频:42分钟) 63 5.1 Oracle表空间 63 5.1.1 Oracle表空间简介 63 5.1.2 创建Oracle表空间 64 5.1.3 查看表空间 66 5.1.4 修改数据库默认表空间 67 5.1.5 修改表空间名称 68 5.1.6 删除表空间 69 5.2 创建Oracle数据表 70 5.2.1 利用工具创建数据表 70 5.2.2 利用工具查看数据表 71 5.2.3 利用命令创建数据表 72 5.2.4 利用命令查看表结构 72 5.3 修改Oracle数据表结构 73 5.3.1 利用工具修改数据表结构 73 5.3.2 利用命令修改数据表结构 74 5.4 删除数据表 75 5.4.1 利用工具删除数据表 76 5.4.2 利用SQL语句删除数据表 76 5.5 备份/恢复数据表 76 5.5.1 利用工具备份/恢复数据表 77 5.5.2 利用命令备份/恢复数据表 82 5.6 临时表 83 5.6.1 临时表简介 83 5.6.2 会话级临时表 84 5.6.3 事务级临时表 85 5.6.4 查看临时表在数据库的信息 86 5.6.5 临时表的应用场景 86 5.7 特殊的表dual 87 5.7.1 分析dual表 87 5.7.2 dual表的应用场景 87 5.7.3 修改dual表对查询结果的影响 88 5.8 本章实例 89 5.9 本章小结 90 5.10 习题 90 第6章 约束(教学视频:43分钟) 91 6.1 主键约束 91 6.1.1 主键简介 91 6.1.2 创建主键约束 92 6.1.3 修改表的主键约束 94 6.1.4 主键应用场景 96 6.2 外键约束 97 6.2.1 外键简介 97 6.2.2 创建外键约束 97 6.2.3 级联更新与级联删除 100 6.2.4 修改外键属性 102 6.2.5 外键使用 104 6.3 唯一性约束 105 6.3.1 唯一性约束简介 105 6.3.2 创建唯一性约束 105 6.3.3 修改唯一性约束 107 6.3.4 唯一性约束的使用 108 6.4 检查约束 108 6.4.1 检查约束简介 108 6.4.2 创建检查约束 108 6.4.3 修改检查约束 110 6.4.4 检查约束的使用 111 6.5 默认值约束 111 6.5.1 默认值约束简介 112 6.5.2 创建默认值约束 112 6.5.3 修改默认值约束 113 6.6 本章实例 115 6.7 本章小结 116 6.8 习题 116 第7章 视图(教学视频:50分钟) 117 7.1 关系视图 117 7.1.1 建立关系视图 117 7.1.2 修改/删除视图 118 7.1.3 联接视图 120 7.1.4 编译视图 122 7.1.5 使用force选项强制创建视图 124 7.1.6 利用视图更新数据表 125 7.1.7 with check option选项 126 7.1.8 关系视图小结 128 7.2 内嵌视图 128 7.2.1 内嵌视图简介 128 7.2.2 内嵌视图的使用 128 7.2.3 内嵌视图小结 130 7.3 对象视图 131 7.3.1 对象视图简介 131 7.3.2 对象视图简介 131 7.4 物化视图 133 7.4.1 物化视图简介 133 7.4.2 物化视图的使用 133 7.4.3 物化视图的数据加载 135 7.4.4 物化视图的数据更新 135 7.4.5 查询重写 136 7.5 本章小结 136 7.6 本章实例 137 7.7 习题 137 第8章 函数与存储过程(教学视频:48分钟) 138 8.1 函数 138 8.1.1 函数简介 138 8.1.2 创建函数 139 8.1.3 函数的括号 140 8.1.4 函数的参数 141 8.1.5 函数的确定性 142 8.1.6 典型函数举例 143 8.2 存储过程 144 8.2.1 存储过程简介 144 8.2.2 创建存储过程 144 8.2.3 存储过程的参数——IN参数 146 8.2.4 存储过程的参数——OUT参数 147 8.2.5 存储过程的参数——IN OUT参数 149 8.2.6 存储过程的参数——参数顺序 149 8.2.7 存储过程的参数——参数的默认值 152 8.2.8 存储过程的参数——参数顺序总结 153 8.3 程序包 153 8.3.1 规范 153 8.3.2 主体 155 8.3.3 调用程序包的函数/存储过程 157 8.3.4 程序包的变量 158 8.4 本章实例 159 8.5 本章小结 161 8.6 习题 161 …… 第9章 游标(教学视频:36分钟) 162 第10章 触发器(教学视频:58分钟) 178 第11章 序列(教学视频:28分钟) 206 第12章 用户角色与权限控制(教学视频:45分钟) 215 第三篇 Oracle的SQL 第13章 Oracle数据类型(教学视频:21分钟) 231 第14章 Oracle的函数与表达式(教学视频:111分钟) 240 第15章 Oracle的控制语句(教学视频:16分钟) 282 第16章 SQL查询(教学视频:55分钟) 290 第17章 SQL更新数据(教学视频:34分钟) 319 第四篇 Oracle编程高级应用 第18章 数据库速度优化与数据完整性(教学视频:32分钟) 332 第19章 数据一致性与事务管理(教学视频:46分钟) 341 第20章 并发控制(教学视频:35分钟) 356 第21章 Oracle的正则表达式(教学视频:29分钟) 369 第五篇 Oracle与编程语言综合使用实例 第22章 Oracle在Java开发的应用(教学视频:38分钟) 376 第23章 Oracle在C#开发的应用(教学视频:12分钟) 391

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧