临时表的创建、判断、使用与系统视图查询
判断并创建本地临时表
IF (EXISTS(SELECT * FROM tempdb.dbo.sysobjects WHERE id = object_id(N'tempdb..#temp') AND type='U'))
BEGIN
DROP TABLE #temp
END
SELECT * INTO #temp FROM personCode language: PHP (php)
其中 tempdb 是 SQL Server 的系统数据库,是可供连接到 SQL Server 实例的所有用户使用的全局资源。#temp 是本地临时表的名称,只在当前数据库连接中可见。
通过 SELECT INTO 创建临时表并继续操作
SELECT name, MAX(cjsj) cjsj, COUNT(DISTINCT age) nums
INTO #tempperson
FROM person
GROUP BY name
SELECT * FROM #tempperson -- 临时表本质上和其他实体表一样使用Code language: CSS (css)
临时表可以进行插入等操作:
INSERT INTO #tempperson(name, cjsj, nums)
VALUES('dsdf', GETDATE(), 4)Code language: PHP (php)
基于临时表再次创建临时表
IF (EXISTS(SELECT * FROM tempdb.dbo.sysobjects WHERE id = object_id(N'tempdb..#temp2') AND type='U'))
BEGIN
DROP TABLE #temp2
END
SELECT t.*
INTO #temp2
FROM #tempperson t
JOIN person p ON t.nums != p.age
SELECT * FROM #temp2Code language: PHP (php)
查询系统对象视图
SELECT * FROM dbo.sysobjects
SELECT * FROM tempdb.dbo.sysobjectsCode language: CSS (css)
通过 tempdb.dbo.sysobjects 可以查看临时数据库中所有用户对象(包括临时表),而 dbo.sysobjects 查看的是当前数据库中的系统对象。
Previous: GROUP BY 分组统计与 COUNT、DISTINCT 用法
Next: GROUP BY 分组后使用子查询