107 sql sql-server sql-server-2008
我想删除一个表但收到以下消息:
消息3726,级别16,状态1,行3
无法删除对象'dbo.UserProfile',因为它由FOREIGN KEY约束引用.
消息2714,级别16,状态6,行2
数据库中已存在名为"UserProfile"的对象.
我浏览了SQL Server Management Studio但我无法找到约束.如何找出外键约束?
Lit*_*eas 192
这里是:
SELECT
OBJECT_NAME(f.parent_object_id) TableName,
COL_NAME(fc.parent_object_id,fc.parent_column_id) ColName
FROM
sys.foreign_keys AS f
INNER JOIN
sys.foreign_key_columns AS fc
ON f.OBJECT_ID = fc.constraint_object_id
INNER JOIN
sys.tables t
ON t.OBJECT_ID = fc.referenced_object_id
WHERE
OBJECT_NAME (f.referenced_object_id) = 'YourTableName'
Run Code Online (Sandbox Code Playgroud)
这样,您将获得引用表和列名称.
根据评论建议编辑使用sys.tables而不是通用sys.objects.谢谢,marc_s
Vla*_*lav 54
另一种方法是检查结果
sp_help 'TableName'
Run Code Online (Sandbox Code Playgroud)
(或只是突出显示引用的TableName和pres ALT + F1)
随着时间的推移,我决定改进我的答案.以下是sp_help
提供的结果的屏幕截图.A在此示例中使用了AdventureWorksDW2012数据库.那里有很多好的信息,我们正在寻找的是最后的 - 以绿色突出显示:
Gay*_*i L 41
试试这个
SELECT
object_name(parent_object_id) ParentTableName,
object_name(referenced_object_id) RefTableName,
name
FROM sys.foreign_keys
WHERE parent_object_id = object_id('Tablename')
Run Code Online (Sandbox Code Playgroud)
Mic*_*ael 24
我发现这个答案非常简单,并根据我的需要做了诀窍:https://stackoverflow.com/a/12956348/652519
链接摘要,使用此查询:
EXEC sp_fkeys 'TableName'
Run Code Online (Sandbox Code Playgroud)
快速而简单.我能够很快找到15个表的所有外键表,各自的列和外键名.
正如@mdisibio在下面提到的,这里是文档的链接,详细说明了可以使用的不同参数:https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp- fkeys-的Transact-SQL
我正在使用此脚本查找与外键相关的所有详细信息.我正在使用INFORMATION.SCHEMA.下面是一个SQL脚本:
SELECT
ccu.table_name AS SourceTable
,ccu.constraint_name AS SourceConstraint
,ccu.column_name AS SourceColumn
,kcu.table_name AS TargetTable
,kcu.column_name AS TargetColumn
FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu
INNER JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc
ON ccu.CONSTRAINT_NAME = rc.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
ON kcu.CONSTRAINT_NAME = rc.UNIQUE_CONSTRAINT_NAME
ORDER BY ccu.table_name
Run Code Online (Sandbox Code Playgroud)
这是在所有数据库中查找外键关系的最佳方法。
exec sp_helpconstraint 'Table Name'
Run Code Online (Sandbox Code Playgroud)
还有另一种方法
select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where TABLE_NAME='Table Name'
--and left(CONSTRAINT_NAME,2)='FK'(If you want single key)
Run Code Online (Sandbox Code Playgroud)
小智 5
SELECT
obj.name AS FK_NAME,
sch.name AS [schema_name],
tab1.name AS [table],
col1.name AS [column],
tab2.name AS [referenced_table],
col2.name AS [referenced_column]
FROM
sys.foreign_key_columns fkc
INNER JOIN sys.objects obj
ON obj.object_id = fkc.constraint_object_id
INNER JOIN sys.tables tab1
ON tab1.object_id = fkc.parent_object_id
INNER JOIN sys.schemas sch
ON tab1.schema_id = sch.schema_id
INNER JOIN sys.columns col1
ON col1.column_id = parent_column_id AND col1.object_id = tab1.object_id
INNER JOIN sys.tables tab2
ON tab2.object_id = fkc.referenced_object_id
INNER JOIN sys.columns col2
ON col2.column_id = referenced_column_id
AND col2.object_id = tab2.object_id;
Run Code Online (Sandbox Code Playgroud)
在 SQL Server Management Studio 中,您只需右键单击对象资源管理器中的表并选择“查看依赖关系”。这将为您提供一个良好的起点。它显示表、视图和引用该表的过程。
归档时间: |
|
查看次数: |
232084 次 |
最近记录: |