sql server 创建临时表的问题

因为数据量过大。会导致SQL语句过大,所以我改为建立一个临时表,再通过联合查询的方式进行处理。

我先创建一个临时表:
conn.execute("if not (select object_id('Tempdb..#tlst')) is null drop table #tlst")
conn.execute("create table #tlst (id int not null)")

然后我再从数据库读取数据,把读到的数据进行处理,然后再写入临时表中去。

现在的问题就出现了。

如果我在建表以后马上写入数据的话,那就是正常的。可以写出和读取。如果再通过记录集读数据,进行处理的话,就会报如下错误:

对象名 '#tlst' 无效。

这是什么原因?应该如何解决?
建表和写入数据在同一个函数之中。在这个函数结束以后,再调用查询语句,读取临时表。这个都是在同一请求中进行的。按理来说应该不会消失的。但是现在就是提示对象名无效。

如果再通过记录集读数据,是不是在同一个会话里面啊?
还是 会话 中间 结束过一次了?

SQL Server
2种:本地临时 全局临时

1> -- 本地临时表.
2> CREATE TABLE #temp_table_local (
3> id INT,
4> value VARCHAR(10)
5> );
6> go

1> -- 全局临时表.
2> CREATE TABLE ##temp_table_global (
3> id INT,
4> value VARCHAR(10)
5> );
6> go

对于本地临时表,只能当前会话能检索到数据。其他会话无法检索。
对于全局临时表,其他会话也能检索到这个表的数据。

1> INSERT INTO #temp_table_local(id, value) VALUES (1, 'ONE');
2> INSERT INTO ##temp_table_global(id, value) VALUES (1, 'ONE');
3> go

(1 行受影响)

1> SELECT COUNT(1) FROM #temp_table_local;
2> SELECT COUNT(1) FROM ##temp_table_global;
3> go

-----------
1

(1 行受影响)

-----------
1

(1 行受影响)

另外一个会话
C:\Documents and Settings\wzq>sqlcmd -S "localhost\SQLEXPRESS"
1> use stock
2> go
已将数据库上下文更改为 'Stock'。
1> SELECT COUNT(1) FROM ##temp_table_global;
2> go

-----------
1

(1 行受影响)

临时表在会话中创建,会话结束的时候,数据库自动删除临时表
温馨提示:内容为网友见解,仅供参考
无其他回答

sqlserver怎么建临时表?
在SQL Server中创建临时表的方法是通过在表名前加上特定的符号来区分。对于本地临时表,使用单个井号(#)标识,而全局临时表则需要两个井号(##)。这些临时表的生命周期仅限于当前会话,当连接断开时,SQL Server会自动删除它们。例如,创建一个本地临时表的语句如下:sql CREATE TABLE #a (id INT, ...

浅析SQL server 临时表
SQL Server中的临时表分为局部临时表和全局临时表,它们在作用域和生命周期上有所不同。局部临时表,如#tempTable,仅在当前会话中创建并可见,当你在另一个查询中尝试访问时,如新建查询2中尝试查询#tempTable,会提示错误,因为这是会话特定的。而全局临时表,如##tempTable,其生命周期扩展到了所有会...

SQL server数据库中建一个临时表,20分钟后使这个临时表自动删除!该怎么...
表名前使用一个#号,临时表是局部的,使用两个#号,临时表是全局的,在断开连接后sql会自动删除临时表 create table #a (id int,name varchar(50))insert into #a(id,name) values(1,'123')select * from #a drop table #a 临时表除了名称前多了#号外,其他操作与普通表完全一样。tb_Stu...

sqlServer临时表的创建和使用
首先,临时表的创建是为了满足一次性或短时间内的数据存储需求。它们通常在查询执行过程中被动态创建,无需预先定义表结构,当查询完成后,临时表就会自动被系统清除。其次,查询临时表是通过SQL语句,可以直接在查询中使用,就像操作常规表一样,可以进行各种数据操作,如选择、过滤和排序等。这些操作的结果...

sql server2000临时表语法问题
C# chai(10)(应该是char) 个人认为最好是用varchar代替char 比较节省空间 问题,‘result(avg_score)’这是函数还是临时表名啊? 貌似没有result的方法吧 如果是表名应该用引号引起来 having avg(sc.score) >= all (result.avg_score);你这是PLSQL么?

sql server中关于临时表的问题?
go declare @a table(id int)select * from @a go 这样可以,但下面这样确不行:go declare @a table(id int)go select * from @a 而以#开头的是临时表,sql会把它存在系统数据库tempdb中,当临时表不用的时候要记得drop table #tab1来删除它,不然它会一直保留到创建它的连接退出为止 ...

如何创建一个数据库的临时表?
1、打开sql server management studio,点击新建查询,创建一个查询。2、创建一个临时表,其中Id是自增字段,第一条记录是1,第二条记录是2,自动增加,这个一般用来作标识,可以循环,其他字段是实际上循环时要取用的数据。3、然后插入数据。4、接着用一个循环,取出数据,并进行相应逻辑处理。5、...

sqlserver怎么建临时表
SQL 语句使用 CREATE TABLE 语句中为 table_name 指定的名称引用临时表:CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)INSERT INTO #MyTempTable VALUES (1)如果本地临时表由存储过程创建或由多个用户同时执行的应用程序创建,则 SQL Server 必须能够区分由不同用户创建的表。为此,SQL Server 在...

sql server数据库建立临时表怎么建立
在表前面加个 # 就可以了!select create 都可以操作了!

sql中怎样将查询出来的结果创建成临时表
其实视图最典型的用途就是这样了,做起来也比较容易,不过楼主要求临时表,那么就试试吧,一般来说数据量大的用表快,不然就建视图,不知道楼主是用什么数据库的呢? 如果是ms sql server的话可以:SELECT * INTO #TEMPTABLENAME FROM (SELECT xxxxxx \/\/你的查询语句 )AS table_source \/\/这个...

相似回答