2016-04-08 55 views
-1

我已經瀏覽了幾十篇關於這個錯誤的文章,並且他們都有相同的解決方案,刪除了由模式引用的所有對象 - 但是錯誤給我的對象不存在。不能刪除模式,因爲它正在被對象引用

所以我嘗試運行以下語法

DROP SCHEMA [Application] 

它給人的錯誤

Cannot drop schema 'Application' because it is being referenced by object 'ApplicationRequestTable'. 

所以我覺得「OK沒問題,我會刪除對象,就像它指出「過去幾個意見」,所以我輸入

SELECT * FROM sys.objects WHERE name = N'ApplicationRequestTable' 

而且上面沒有任何迴應 - 我正在做什麼ng錯誤,因爲它看起來像我的模式引用了一個不會退出的對象?!?我通過鍵入

SELECT o.name, s.name FROM sys.objects o JOIN sys.schemas s on o.schema_id = s.schema_id ORDER by s.name 

進一步驗證並沒有在應用程序架構下,單個對象...任何指針將不勝感激,因爲我無法看到所有現在參照這個模式什麼?

版:SQL服務器2014 SP1(建12.0.4100)

回答

1

並不是所有的對象都在sys.objects中

至少...

  • 序列(sys.sequences)
  • 用戶定義的表類型(sys,table_types)
  • 服務代理對象(sys.service_queues)

全部列表

SELECT OBJECT_NAME(ac.object_id) FROM sys.all_columns ac WHERE name = 'schema_id' 
+0

我發現表中table_types(這是一個用戶定義的表畢竟) 'SELECT * FROM sys.table_types其中name = N'ApplicationRequestTable'' 這ApplicationRequestTable不會出現在sys.all_columns,儘管如此,你有這個錯誤... 'SELECT OBJECT_NAME(ac.object_id)FROM sys.all_columns ac ORDER BY OBJECT_NAME(ac.object_id)' 返回14786行,ApplicationRequestTable不是其中之一,Application.ApplicationRequestTable表在對象資源管理器中也不存在。 –

+0

解釋爲什麼我錯了,即使您在要刪除的架構中找到了您的對象。 Application.ApplicationRequestTable不是一個表。它是一個**表類型**,它出現在Programmability..Types節點(不是Tables節點)下,並且在sys.columns中沒有任何條目。我提到了sys.all_columns,所以你可以找到依賴於模式的對象:不要查找關於你的對象的元數據。 – gbn

+0

好吧,我現在看到。你的措辭是「完整列表」,所以我認爲我的ApplicationRequestTable應該在所謂的「完整」列表中 - 你是指對象類型列表(如果這是正確的措辭,即table_types)?因此,從列表中的24箇中選擇一個將返回我的ApplicationRequestTable的答案 –

相關問題