De acordo com este artigo do MSDN http://msdn.microsoft.com/en-us/library/ms190328.aspx
Quando um nome de tabela temporária é especificado, o nome do banco de dados deve vir antes do nome da tabela temporária, a menos que o banco de dados atual seja tempdb. Por exemplo:
SELECT OBJECT_ID('tempdb..#mytemptable')
.
Mas quando estou realmente criando uma tabela temporária em um banco de dados diferente tempdb
da função não está funcionando conforme especificado:
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
Isto é o que eu vejo:
from_beta1
----------
NULL
from_tempdb
---------------
#t_________________...______0000000000B9
O que estou perdendo ou fazendo de errado?
Você tem que dizer
object_name
que ele precisa procurar nos metadados do tempdb.object_id()
está retornando uma multa de valor; o problema é queobject_name()
(que não é a documentação que você está vendo), por padrão, procurasys.objects
o contexto atual do banco de dados.Não sei por que você precisaria usar
object_name()
aqui quando obviamente já conhece o nome (#t
). Ou você está tentando obter#t___________acde4521
? Com o que exatamente você vai fazer#t___________acde4521
? Por quê?Você pode obtê-lo, mas eu recomendo desta forma:
Eis por que tento usar funções de metadados com moderação:
Ainda confuso sobre o que você vai fazer com esse nome, no entanto...