⑴ 数据库 sql中用SELECT INTO语句创建的临时表在数据库中看得到吗
在MS SQL SERVER中临时表不存储在当前数据库内,而是存储在系统数据库 tempdb 内;如果当用户断开连接时没有除去临时表,SQL Server 将自动除去临时表。
⑵ SQL临时表select * into ##test from 表A
这时会报错。。。因为临时表已经创建了,需要删除临时表才能执行语句。
⑶ SQL怎么创建一个临时表
创建临时表
方法一:
create table #临时表名(字段1 约束条件,
字段2 约束条件,
.....)
create table ##临时表名(字段1 约束条件,
字段2 约束条件,
.....)
方法二:
select * into #临时表名 from 你的表;
select * into ##临时表名 from 你的表;
注:以上的#代表局部临时表,##代表全局临时表
查询临时表
select * from #临时表名;
select * from ##临时表名;
删除临时表
drop table #临时表名;
drop table ##临时表名;
⑷ select * into #temp from 表在T-SQL中可以建立临时表,可是在VB中代码要怎么写
用adodb组件创建connection对象,连接数据库,exec上面的语句,然后只要connection不关闭,就能访问这个临时表。
⑸ SQL临时表使用
1、创建方法:
方法一:
create table TempTableName
或
select [字段1,字段2,...,] into TempTableName from table
方法二:
create table tempdb.MyTempTable(Tid int)
说明:
(1)、临时表其实是放在数据库tempdb里的一个用户表;
(2)、TempTableName必须带“#”,“#"可以是一个或者两个,以#(局部)或##(全局)开头的表,这种表在会话期间存在,会话结束则自动删除;
(3)、如果创建时不以#或##开头,而用tempdb.TempTable来命名它,则该表可在数据库重启前一直存在。
2、手动删除
drop table TempTableName
说明:
DROP TABLE 语句显式除去临时表,否则临时表将在退出其作用域时由系统自动除去:
(1)、当存储过程完成时,将自动除去在存储过程中创建的本地临时表。由创建表的存储过程执行的所有嵌套存储过程都可以引用此表。但调用创建此表的存储过程的进程无法引用此表;
(2)、所有其它本地临时表在当前会话结束时自动除去;
(3)、全局临时表在创建此表的会话结束且其它任务停止对其引用时自动除去。任务与表之间的关联只在单个Transact-SQL语句的生存周期内保持。换言之,当创建全局临时表的会话结束时,最后一条引用此表的Transact-SQL语句完成后,将自动除去此表。
⑹ SQL语句 可以这样用吗 select sum(abc) into 临时表 from 表1,表2 where .......
可以加where。这样会根据where所限定的条件筛选所需要的行到创建的临时表中。
⑺ SQL如何把查询出来的多个表创建成一个临时表
SELECT * INTO #TEMPTABLENAME
FROM
(
SELECT xxxxxx //你的查询语句
)AS table_source //这个别名是必须的
WHERE xxxxxxxx //你需要的where判断;
COMMIT或ROLLBACK后可自动删除该临时表
1、sql server使用select into会自动生成临时表,不需要事先创建。
select * into #temp from sysobjects
2、sql要把多个表合并成一个要用到union或union all的关键字。
3、union或union all的区别是:union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来。
(7)sqlselectinto临时表扩展阅读
sql语言特点如下:
1、一体化:SQL集数据定义DDL、数据操纵DML和数据控制DCL于一体,可以完成数据库中的全部工作。
2、使用方式灵活:它具有两种使用方式,即可以直接以命令方式交互使用;也可以嵌入使用,嵌入到C、C++、FORTRAN、COBOL、JAVA等主语言中使用。
3、语言简洁,语法简单,好学好用:在ANSI标准中,只包含了94个英文单词,核心功能只用6个动词,语法接近英语口语。
⑻ SQL 怎样把查询的结果保存成一张临时表
假如你的多表查询是 select * from 表 where 条件
那么你要的语句就是
select * into #temp from 表 where 条件
这里很简单就可以完成 在你的查询出来的列名 和from之间 这里是select *和from 你的可能不是
添加 into #你的临时表名 其他都不做改动
⑼ SQL select语句为了将查询结果放到临时表中使用哪个关键字
直接: select * into #Content from 表 truncate table #Content --清空临时表
drop table #Content --删除临时表还可以:create table #Content(UserID varchar(10),UserName varchar(10)) --创建临时表insert into #Content select UserID,UserName from tabletruncate table #Content --清空临时表
drop table #Content --删除临时表
⑽ SELECT INTO 语句可以创建本地或全局临时表吗
可以。
SQL Server临时表有两种类型:本地和全局。它们在名称、可见性以及可用性上有区别。本地临时表的名称以单个数字符号 (#)
打头;它们仅对当前的用户连接是可见的;当用户从 SQL Server 实例断开连接时被删除。全局临时表的名称以两个数字符号 (##)
打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除。
如果数据库会话创建了本地临时表 #temtable,则仅会话可以使用该表,会话断开连接后就将该表删除。如果创建了
##temtable全局临时表,则数据库中的任何用户均可使用该表。如果该表在您创建后没有其他用户使用,则当您断开连接时该表删除。如果您创建该表后另一个用户在使用该表,则SQL Server 将在您断开连接并且所有其他会话不再使用该表时将其删除。
如果本地临时表由存储过程创建或由多个用户同时执行的应用程序创建,则SQL Server 必须能够区分由不同用户创建的表。为此,SQL Server 在内部为每个本地临时表的表名追加一个数字后缀。存储在tempdb 数据库的 sysobjects 表中的临时表,其全名由 CREATE TABLE 语句中指定的表名和系统生成的数字后缀组成。为了允许追加后缀,为本地临时表指定的表名table_name不能超过 116 个字符。
当存储过程完成时,将自动除去在存储过程中创建的本地临时表。由创建表的存储过程执行的所有嵌套存储过程都可以引用此表。但调用创建此表的存储过程的进程无法引用此表。
临时表位于tempdb系统数据库。
使用SELECT INTO语句可以把任何查询结果集放置到一个新表中,还可以通过使用SELECT
INTO语句解决复杂的问题。例如,需要从不同数据源中得到数据集,如果一开始先创建一个临时表,那么在该表上执行查询比在多表或多数据库中执行查询更简单。
在使用SELECT INTO语句时,应该注意如下的事项和原则:
可以使用SELECT INTO语句创建一个表并且在单独操作中向表中插入行。确保在SELECT INTO语句中指定的表名是惟一的。如果表名出现重复,SELECT
INTO语句将失败。
可以创建本地或全局临时表。要创建一个本地临时表,需要在表名前加符号(#);要创建一个全局临时表,需要在表名前加两个符号(##)。本地临时表只在当前的会话中可见,全局临时表在所有的会话中都可见。
当使用者结束会话时,本地临时表的空间会被回收。
当创建表的会话结束且当前参照表的最后一个Transact-SQL语句完成时,全局临时表的空间会被回收。
使用SELECT INTO语句的基本语法如下:
SELECT <select_list>
INTO new_table
FROM {<table_source>}[,…n]
WHERE <search_condition>
例如:select * into #newTable from news where s_date>'2010-3-1'
利用SQL Server的全局临时表防止用户重复登录
在我们开发商务软件的时候,常常会遇到这样的一个问题:怎样防止用户重复登录我们的系统?特别是对于银行或是财务部门,更是要限制用户以其工号身份多次登入。
可能会有人说在用户信息表中加一字段判断用户工号登录的状态,登录后写1,退出时写0,且登录时判断其标志位是否为1,如是则不让该用户工号登录。但是这样那势必会带来新的问题:如发生象断电之类不可预知的现象,系统是非正常退出,无法将标志位置为0,那么下次以该用户工号登录则不可登入,这该怎么办呢?
或许我们可以换一下思路:有什么东西是在connection断开后可以被系统自动回收的呢?对了,SQL
Server的临时表具备这个特性!但是我们这里的这种情况不能用局部临时表,因为局部临时表对于每一个connection来说都是一个独立的对象,因此只能用全局临时表来达到我们的目的。
好了,情况已经明朗话了,我们可以写一个象下面这样简单的存储过程:
create procere gp_findtemptable -- 2001/10/26 21:36 zhuchao in nanjing
/* 寻找以操作员工号命名的全局临时表
* 如无则将out参数置为0并创建该表,如有则将out参数置为1
* 在connection断开连接后,全局临时表会被SQL Server自动回收
* 如发生断电之类的意外,全局临时表虽然还存在于tempdb中,但是已经失去活性
* 用object_id函数去判断时会认为其不存在. */
@v_userid varchar(6), -- 操作员工号
@i_out int out -- 输出参数 0:没有登录 1:已经登录
as
declare @v_sql varchar(100)
if object_id('tempdb.dbo.##'+@v_userid) is null
begin
set @v_sql = 'create table ##'+@v_userid+'(userid varchar(6))'
exec (@v_sql)
set @i_out = 0
end
else
set @i_out = 1
在这个过程中,我们看到如果以用户工号命名的全局临时表不存在时过程会去创建一张并把out参数置为0,如果已经存在则将out参数置为1。
这样,我们在我们的应用程序中调用该过程时,如果取得的out参数为1时,我们可以毫不客气地跳出一个message告诉用户说”对不起,此工号正被使用!”
判断方法范例:
select @sTmpWareA="tempdb..[##MARWareA"+ @ComputerName+"]"
if exists (select * from tempdb..sysobjects where id = object_id(@sTmpWareA) and
type = "U")
begin
set @sTmpWareA="[##MARWareA"+ @ComputerName+"]"
exec( "drop table " )
end
else
set @sTmpWareA="[##MARWareA"+ @ComputerName+"]"
@sTmpWareA 就是临时表的名称,过程中使用exec来操作