我可以做这样的事情吗?
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/