Sql-Server-2008-R2
為什麼我不能獲取臨時表的 OBJECT_NAME()?
根據這篇 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 的元數據。select object_name(object_id('tempdb..#t'), db_id('tempdb')) as from_beta1
object_id()
正在返回一個值;問題是object_name()
(這不是您正在查看的文件)預設情況下會查找sys.objects
目前數據庫上下文。
object_name()
當您顯然已經知道名稱(#t
)時,不知道為什麼需要在這裡使用。還是你想得到#t___________acde4521
?你到底要做什麼#t___________acde4521
?為什麼?你可以得到它,但我推薦這種方式:
SELECT name FROM tempdb.sys.objects WHERE [object_id] = OBJECT_ID(N'tempdb.dbo.#t');
這就是我嘗試謹慎使用元數據函式的原因:
不過,仍然對您將要使用該名稱做什麼感到困惑…