像很多高手给出的例子中 有些表名前加了#号,不知道为什么加个#号?
"select 1 union all " 这句是什么意思?超级大菜鸟,不懂的就问问,希望大家别拿砖砸我
-------如果不限定記錄數
---------建表和數據----------
Create table a(bb int)
insert into a
select 1 union all
select 2 union all
select 3 union all
select 4 union all
select 5 union all
select 6 union all
select 7 union all
select 8 union all
select 9 --------------------建過程處理-----------
create proc kk
as
create table #b(cc int)
declare @i int,@p int
set @i=1
select @p=count(*) from a
while @i <@p
begin
insert into #b values(@i)
set @i=@i+3
end
select *,pp=identity(int,1,1) into #c from a
select * from #c where pp in (select cc from #b)
drop table #b
drop table #c
-----------過程結束----------------
--exec kk -------執行過程
---------結果--------自己看
"select 1 union all " 这句是什么意思?超级大菜鸟,不懂的就问问,希望大家别拿砖砸我
-------如果不限定記錄數
---------建表和數據----------
Create table a(bb int)
insert into a
select 1 union all
select 2 union all
select 3 union all
select 4 union all
select 5 union all
select 6 union all
select 7 union all
select 8 union all
select 9 --------------------建過程處理-----------
create proc kk
as
create table #b(cc int)
declare @i int,@p int
set @i=1
select @p=count(*) from a
while @i <@p
begin
insert into #b values(@i)
set @i=@i+3
end
select *,pp=identity(int,1,1) into #c from a
select * from #c where pp in (select cc from #b)
drop table #b
drop table #c
-----------過程結束----------------
--exec kk -------執行過程
---------結果--------自己看
临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。临时表有两种类型:本地和全局。它们在名称、可见性以及可用性上有区别。本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 SQL Server 实例断开连接时被删除。全局临时表的名称以两个数字符号 (##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除。例如,如果创建了 employees 表,则任何在数据库中有使用该表的安全权限的用户都可以使用该表,除非已将其删除。如果数据库会话创建了本地临时表 #employees,则仅会话可以使用该表,会话断开连接后就将该表删除。如果创建了 ##employees 全局临时表,则数据库中的任何用户均可使用该表。如果该表在您创建后没有其他用户使用,则当您断开连接时该表删除。如果您创建该表后另一个用户在使用该表,则 SQL Server 将在您断开连接并且所有其他会话不再使用该表时将其删除。临时表的许多用途可由具有 table 数据类型的变量替换。有关使用 table 变量的详细信息,请参阅 表 (Transact-SQL)。
## 全局临时表 (不要再问我什么区别,自己查资料去)
select 1 union all这个应该还有下文。
就是连接2个集合为1个
--Joyhen
--2010-06-05--①临时表主要会增加tempdb的IO,性能一定程度上有所下降。--②
/*比如说现在有一张表Student,那么你可以按照下面方法创建一张临时表,假如临时表表名叫StudentTemp,语句如下:
SELECT * INTO #StudentTemp FROM Student
这样就创建了一张临时表StudentTemp。访问临时表与访问正常表一样!如SELECT * FROM StudentTemp记得在用完之后要删除临时表!删除临时表语句如下:
DROP TABLE StudentTemp
*/--=================临时表一般存放于系统数据库》tempdb》临时表中
/*1、局部临时表(#开头)只对当前连接有效,当前连接断开时自动删除。
2、全局临时表(##开头)对其它连接也有效,在当前连接和其他访问过它的连接都断开时自动删除。
3、不管局部临时表还是全局临时表,只要连接有访问权限,都可以用drop table #Tmp(或者drop table ##Tmp)来显式删除临时表。
*/
--===========================================================================================================================--③
临时表
可以创建本地和全局临时表。本地临时表仅在当前会话中可见;全局临时表在所有会话中都可见。本地临时表的名称前面有一个编号符 (#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 约束中不能引用临时表。
考虑使用表变量而不使用临时表。当需要在临时表上显式地创建索引时,或多个存储过程或函数需要使用表值时,临时表
很有用。通常,表变量提供更有效的查询处理。