谁能给我一个sql server 临时表的例子????

来源:百度知道 编辑:UC知道 时间:2024/05/18 03:41:00
包括临时表的 新建、插入记录、更新、删除以及从另外一个表中选取数据批量插入。谢谢了
哪位帮我看一下这段存储过程有什么错误啊
/*
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

CREATE PROCEDURE proc_getList
(
@typeId int,
@code nvarchar(10),
@pagesize int
)
AS
BEGIN
SET NOCOUNT ON
DECLARE @COUNT INT
DECLARE @temp INT

SELECT * INTO #TEMP FROM content WHERE [code]='A2' AND [typeId]=@typeId
SELECT @COUNT=COUNT(Id) FROM #TEMP
IF @COUNT!<@pagesize --随机抽取前pagesize项
SELECT TOP @pagesize FROM #temp ORDER BY newid()
ELSE --从code='A4'补偿
BEGIN
SELECT * INTO #TEMP FROM content WHERE [code]='A4' AND [typeId]=@typeId
SELECT @COUNT=COUNT(Id) FROM #TEMP
IF @COUNT!<@pagesize --抽取前pagesize项
SELECT TOP @pagesize FROM #temp
ELSE --从普通中补偿
BEGIN
SET @temp=@pagesize-@COUNT
SELECT TOP @temp * INTO #TEMP FROM content WHE

其实建立好的临时表与真实表在使用上(插入记录、更新、删除、批量插入)没有任何区别,所有应用于真实表的这几个操作在临时表上都是一样的使用!

临时表的关键点:
一、建立:有两种方式。1)显示地Creat table,如:
create table #tbl_Line(line varchar(10))
insert into #tbl_Line(line)
select distinct ltrim(rtrim(line_no))
from tbl_pas_scan_seq
where to_wc='A201'
这种方式的好处在于,可自行控制临时表的结构。

2)用select into table,在建立的同时批量写入数据,如:
select distinct ltrim(rtrim(line_no)) into #tbl_Line
from tbl_pas_scan_seq
where to_wc='A201'
这种方式的好处在于快捷,临时表结构依赖于From子句中的相应表和字段,当然select 子句中对字段的处理也会有影响。

二、表的生存周期:
1)显示地删除表,在不需要用到临时表的时候,直接 drop table。如:drop table #tbl_Line,建议这样做。
2)SQL系统自动删除,在整个事务结束时、在联接断开时,系统自动删除所建立的临时表。但在出现异常导致异常地中断,临时表可能就不能自动删除,那将在下次数据库系统重启时,自动清理。
---------------------------
存储过程中看得出来的错误是:“SELECT TOP @pagesize ……”
因为Top子句后面是不可以用变量的!只能“top 10 ”这样。
解决办法可以用游标,或用循环,每次“Top 1”,再控制循环次数。

要是你是从另外一个表中选取数据批量插入,则采用

SELECT * INTO TempTable FROM So