根据这篇 MSDN 文章http://msdn.microsoft.com/en-us/library/ms190328.aspx
指定临时表名时,数据库名必须在临时表名之前,除非当前数据库是 tempdb。例如:
SELECT OBJECT_ID('tempdb..#mytemptable')
。
但是,当我实际上在数据库中创建临时表时tempdb
,函数未按指定工作:
use beta1
create table #t(id int)
select object_name(object_id('tempdb..#t')) as from_beta1
use tempdb
select object_name(object_id('tempdb..#t')) as from_tempdb
drop table #t
这就是我所看到的:
from_beta1
----------
NULL
from_tempdb
---------------
#t_________________...______0000000000B9
我错过了什么或做错了什么?
您必须告诉
object_name
它需要查看 tempdb 的元数据。object_id()
正在返回一个值;问题是object_name()
(这不是您正在查看的文档)默认情况下会查找sys.objects
当前数据库上下文。object_name()
当您显然已经知道名称(#t
)时,不知道为什么需要在这里使用。还是你想得到#t___________acde4521
?你到底要做什么#t___________acde4521
?为什么?你可以得到它,但我推荐这种方式:
这就是我尝试谨慎使用元数据函数的原因:
不过,仍然对您将要使用该名称做什么感到困惑...