sql server为什么只有临时表,没有内存表呢?

universee 2007-10-09 07:10:48
sql server为什么只有临时表,没有内存表呢?
...全文
1641 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouc_1983 2011-07-27
  • 打赏
  • 举报
回复
学习+接分
gawz 2011-07-22
  • 打赏
  • 举报
回复
可惜没有全局的表变量...
lg314 2010-11-04
  • 打赏
  • 举报
回复
其实这个不能算内存表,表变量还是存在tempdb里面,只是操作表变量不会产生数据库日志,还有就是可以给没有建表权限的用户当临时表使用
Mr_Nice 2010-11-04
  • 打赏
  • 举报
回复
内存表 = 表变量
obuntu 2010-11-04
  • 打赏
  • 举报
回复
好老的帖子。。
luoyefeng1022 2010-11-04
  • 打赏
  • 举报
回复
Declare @temp table
(
ddd int
)
这不是内存表是什么?它的数据存储在那个位置?楼主应该没搞清楚 @table #table ##table 区别!
小疮子 2010-11-03
  • 打赏
  • 举报
回复
用临时表比直接在本表上的存取好处在哪里呢?
shirley_yue 2007-12-17
  • 打赏
  • 举报
回复
学习了!
arrow_gx 2007-12-17
  • 打赏
  • 举报
回复
临时表:#temp

内存表=表变量:@temp 唯一不足的地方就是过程结束,表变量就释放了

sql server 里面没有常驻内存的表变量,就是说 没有真正意义上的内存表



hui_hui_2007 2007-12-17
  • 打赏
  • 举报
回复
表变量,就是内存表呀。
形如:

declare @tb1 table (myid int,mytext varchar(10))

insert into @tb1
select 1,'aaaaaa' union all
select 2,'bbbbbb'

select *
from @tb1

/*
myid mytext
----------- ----------
1 aaaaaa
2 bbbbbb

(所影响的行数为 2 行)
*/

feixian49 2007-10-09
  • 打赏
  • 举报
回复
Learning
universee 2007-10-09
  • 打赏
  • 举报
回复
我想在(VC+ADO)中定义一个表变量应该怎么办呢?
一m_pConnecttion->Execute后就离开当前作用域了。结果表变量就被释放了。

我是想用表变量替换临时表来做销售明细表的处理。


---------------------------------------
Transact-SQL 参考


table
一种特殊的数据类型,用于存储结果集以供后续处理。该数据类型主要用于临时存储一组行,这些行将作为表值函数的结果集返回。

语法


说明 使用 DECLARE @local_variable 声明 table 类型的变量。


table_type_definition ::=
TABLE ( { column_definition | table_constraint } [ ,...n ] )

column_definition ::=
column_name scalar_data_type
[ COLLATE collation_definition ]
[ [ DEFAULT constant_expression ] | IDENTITY [ ( seed , increment ) ] ]
[ ROWGUIDCOL ]
[ column_constraint ] [ ...n ]

column_constraint ::=
{ [ NULL | NOT NULL ]
| [ PRIMARY KEY | UNIQUE ]
| CHECK ( logical_expression )
}

table_constraint ::=
{ { PRIMARY KEY | UNIQUE } ( column_name [ ,...n ] )
| CHECK ( search_condition )
}

参数
table_type_definition

与 CREATE TABLE 中定义表所用的信息子集相同的信息子集。表声明包括列定义、名称、数据类型和约束。允许的约束类型仅为 PRIMARY KEY、UNIQUE KEY 和 NULL。

有关语法的更多信息,请参见 CREATE TABLE、CREATE FUNCTION 和 DECLARE @local_variable。

collation_definition

是由 Microsoft® Windows™ 区域设置和比较风格、Windows 区域设置和二进制表示法或 Microsoft SQL Server™ 排序规则组成的列的排序规则。

注释
可将函数和变量声明为 table 类型。table 变量可用于函数、存储过程和批处理中。

尽可能使用表变量而不使用临时表。table 变量有以下优点:

table 变量的行为类似于局部变量,有明确定义的作用域。该作用域为声明该变量的函数、存储过程或批处理。
在其作用域内,table 变量可像常规表那样使用。该变量可应用于 SELECT、INSERT、UPDATE 和 DELETE 语句中用到表或表的表达式的地方。但是,table 不能用在下列语句中:

INSERT INTO table_variable EXEC 存储过程。

SELECT select_list INTO table_variable 语句。

在定义 table 变量的函数、存储过程或批处理结束时,自动清除 table 变量。

在存储过程中使用表变量与使用临时表相比,减少了存储过程的重新编译量。


涉及表变量的事务只在表变量更新期间存在。这样就减少了表变量对锁定和记录资源的需求。
不支持在表变量之间进行赋值操作。另外,由于表变量作用域有限,并且不是持久数据库的一部分,因而不受事务回滚的影响。

universee 2007-10-09
  • 打赏
  • 举报
回复
谢谢楼上各位牛牛,请问哪本书上有讲内存表的知识呢?
有哪些语句内存表不支持呢?
elvis_gao 2007-10-09
  • 打赏
  • 举报
回复
我们所说的表变量就是内存表,因为变量是保存在内存中的,#aaa是临时表,@aaa是内存表,定义方式不同,如下:
create table #aaa (a char(1))
insert #aaa values ('1')
declare @aaa table (a char(1))
insert into @aaa select * from #aaa
还有内存表对于一些语句是不支持的,如下:
select * into @temp from table
按照一般的理解,采用临时表比内存表要慢一些,因为读取内存的速度一定比读取磁盘的速度快得多。
ruihuahan 2007-10-09
  • 打赏
  • 举报
回复
所谓内存表,就是具有表结构的一种自定义类型,可以用sql语句对这种类型的变量进行操作。
晓风残月0110 2007-10-09
  • 打赏
  • 举报
回复
#temp 局部变量表,##全局变量表,@temp临时表


declare @temp table(id int identity(1,1),Name varchar(10))
insert @temp select 'aa'
insert @temp select 'bb'
select * from @temp
universee 2007-10-09
  • 打赏
  • 举报
回复
内存表和临时表到底是什么区别呢?
universee 2007-10-09
  • 打赏
  • 举报
回复
请问sql server中到底有没有内存表呢?

网上查到可以有内存表 @temp。
联机帮助中却没有

比如可以这样
create table #aaa (a char(1))
insert #aaa values ('1')
declare @aaa table (a char(1))
insert into @aaa select * from #aaa
drop table #aaa

insert into @aaa (a) values('2')
测试也通过了
  • 打赏
  • 举报
回复
使用表变量就是内存表了。
东那个升 2007-10-09
  • 打赏
  • 举报
回复
表变量不就是存放在内存中吗!

34,593

社区成员

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

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