如何在SQL Server中创建临时表?能否用类似Redshift的语句从现有表生成?
在SQL Server中创建临时表的等效写法
当然有啦!SQL Server支持和Redshift非常类似的语法来快速创建临时表,不过有两种常用的写法,我给你详细说明:
1. 本地临时表(仅当前会话可见)
这是最常用的场景,临时表仅在你的当前数据库连接中可用,断开连接后会自动被清理。你可以用两种方式实现:
方式一:CREATE TABLE ... AS SELECT(和Redshift语法几乎一致)
CREATE TABLE #CARS AS SELECT * FROM BD_CARS_111; -- 查询临时表 SELECT * FROM #CARS;
方式二:SELECT ... INTO(SQL Server中更传统的写法)
这种写法也很常用,效果完全相同:
SELECT * INTO #CARS FROM BD_CARS_111; SELECT * FROM #CARS;
2. 全局临时表(所有会话可见)
如果你需要让其他数据库连接也能访问这个临时表,可以用全局临时表(名称以##开头),它会在创建它的连接关闭,且没有其他连接在使用它时才被删除:
CREATE TABLE ##CARS AS SELECT * FROM BD_CARS_111; -- 或者用INTO写法 SELECT * INTO ##CARS FROM BD_CARS_111; SELECT * FROM ##CARS;
小提示
- 两种写法都能快速复制源表的结构和数据,如果需要自定义表结构(比如添加约束、修改字段类型),可以先手动创建临时表,再用
INSERT INTO ... SELECT来导入数据。 - 本地临时表的名称前必须加
#,全局临时表加##,这是SQL Server临时表的标识规则。
内容的提问来源于stack exchange,提问作者dapdap




