将临时表重命名为物理表

Cor*_*rei 8 sql sql-server sql-server-2008

我可以这样做吗?

create table #tbl_tmp (col1 int)

insert into #tbl_tmp select 3

exec sp_rename '#tbl_tmp','tbl_new'
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 9

没有.

如果是从其他不是数据库运行这个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  
Run Code Online (Sandbox Code Playgroud)

你为什么不首先创建一个永久表,然后重命名?


Ode*_*ded 9

据我所知,这是不可能的tempdb.

您可以从临时表创建一个新表,而不是重命名表.

未经测试:

SELECT * 
INTO tbl_new
FROM #tbl_tmp
Run Code Online (Sandbox Code Playgroud)