将临时表重命名为物理表
我可以做这样的事情吗?
create table #tbl_tmp (col1 int)
insert into #tbl_tmp select 3
exec sp_rename '#tbl_tmp','tbl_new'
-
不。
如果您从其他数据库中运行此数据库
tempdb
,则无法获得在当前数据库中找不到名称为“ #tbl_tmp”的项目…。
这并不奇怪,因为所有数据页等都在
tempdb
数据文件中,因此您将无法重命名它,使其突然成为另一个数据库中的永久表。如果您从中运行此程序,
tempdb
则会得到为过程’sys.sp_rename’指定了无效的参数或选项。
如果您这样做
EXEC sp_helptext sp_rename
并查看定义,则不允许使用的相关代码是-------------------------------------------------------------------------- -------------------- PHASE 32: Temporay Table Isssue ------------------- -------------------------------------------------------------------------- -- Disallow renaming object to or from a temp name (starts with #) if (@objtype = 'object' AND (substring(@newname,1,1) = N'#' OR substring(object_name(@objid),1,1) = N'#')) begin COMMIT TRANSACTION raiserror(15600,-1,-1, 'sys.sp_rename') return 1 end
为什么不首先创建永久表,然后重命名呢?