2012-07-26 67 views
0

我正在重構我的應用程序,並且我不再需要其中一個數據庫表。我嘗試將其刪除,但它給了我一個錯誤:我怎樣才能找出哪個表連接到某個表?

Drop Failed for: 'XYZ'. Could not drop because it is referenced by a Foreign Key Constraint

我如何可以找出其他表有外鍵列到這個表?

回答

0

右鍵單擊對象瀏覽和查看依賴關係中的表格?

+0

有人向下投我不做任何評論。請解釋?我總是打開糾正。 – PowerUser 2013-07-31 20:33:31

0

你可以在這裏獲取列表(離開關閉where子句,如果你想在數據庫中的所有FK約束列表):

SELECT name, 
    QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id)) 
    + '.' + QUOTENAME(OBJECT_NAME(parent_object_id)) 
    + ' references ' 
    + QUOTENAME(OBJECT_SCHEMA_NAME(referenced_object_id)) 
    + '.' + QUOTENAME(OBJECT_NAME(referenced_object_id)) 
FROM sys.foreign_keys 
WHERE OBJECT_NAME(referenced_object_id) = N'XYZ'; 

要生成的下降,你可以說:

DECLARE @sql NVARCHAR(MAX); 
SET @sql = N''; 

SELECT @sql = @sql + ' 
    ALTER TABLE ' + 
    QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id)) 
    + '.' + QUOTENAME(OBJECT_NAME(parent_object_id)) 
    + ' DROP CONSTRAINT ' + QUOTENAME(name) + ';' 
FROM sys.foreign_keys 
WHERE OBJECT_NAME(referenced_object_id) = N'XYZ'; 

EXEC sp_executesql @sql; 
0

試試這個

select * from sys.foreign_keys fk where referenced_object_id = object_id(<tablename>) 
+0

爲什麼'all_objects'?你爲什麼需要加入? – 2012-07-26 15:23:22

+0

Sybase的壞習慣我猜。 – 2012-07-26 15:35:21

相關問題