sql - 将临时表重命名为物理表

标签 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'

最佳答案

没有。

如果您从 tempdb 以外的数据库运行此命令,您会得到

No item by the name of '#tbl_tmp' could be found in the current database ....

这并不奇怪,因为所有数据页等都在 tempdb 数据文件中,因此您无法将其重命名为突然成为其他数据库中的永久表。

如果您从 tempdb 运行它,您会得到

An invalid parameter or option was specified for procedure '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  

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

关于sql - 将临时表重命名为物理表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7552550/

相关文章:

sql - 将 sql 列拆分为可查询的结果集

sql - 在 SQL Server 中连接 2 个数字

mysql - 使用 SQL 对位置进行排名

c# - 动态地在 Linq C# 中加入多表

sql - 如何通过Hibernate获取数据库版本?

c# - 是否存在用于同步本地和远程 SQL Server 数据库的 .NET 技术?

sql - IN 语句中的 SELECT 子查询挂起 SQL Server

sql-server-2008 - SQL Server 2008 报告服务权限

MySQL:更新语句期间为 "Unknown column in where clause"

c# - 关于将内容放在ASP.NET MVC中的位置有些困惑