[SQL] 어떻게 SQL Server의 어떤 FOREIGN KEY 제약 조건 참조 테이블을 찾을 수 있습니까?
SQL어떻게 SQL Server의 어떤 FOREIGN KEY 제약 조건 참조 테이블을 찾을 수 있습니까?
나는 테이블을 삭제하려고하지만, 다음과 같은 메시지가 무엇입니까 :
나는 SQL Server Management Studio를 함께 주위를 둘러 보았다하지만 제약 조건을 찾을 수 없습니다입니다. 어떻게 외래 키 제약 조건을 찾을 수 있습니까?
해결법
-
==============================
1.여기있어:
여기있어:
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'
이 방법은, 당신은 참조 테이블 및 열 이름을 얻을 것이다.
대신 주석의 제안에 따라 제네릭는 sys.objects의 sys.tables를 사용하여 편집. 감사합니다, marc_s
-
==============================
2.또 다른 방법의 결과를 확인하는 것입니다
또 다른 방법의 결과를 확인하는 것입니다
sp_help 'TableName'
(또는 인용 테이블 이름을 누르 ALT + F1을 강조)
시간이 흐르면서, 난 그냥 내 대답을 수정하기로 결정했다. 다음은 그 sp_help는이 제공하는 결과의 스크린 샷이다. A는이 예를 들어 AdventureWorksDW2012 DB를 사용하고 있습니다. 이 많은 좋은 정보가, 그리고 우리가 찾고있는 것은 매우 끝에 - 녹색으로 강조 표시 :
-
==============================
3.이 시도
이 시도
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')
-
==============================
4.나는이 대답은 아주 간단 발견하고 내가 필요한 것을 위해 속임수를 썼는지 : https://stackoverflow.com/a/12956348/652519
나는이 대답은 아주 간단 발견하고 내가 필요한 것을 위해 속임수를 썼는지 : https://stackoverflow.com/a/12956348/652519
링크에서 요약이 쿼리를 사용 :
EXEC sp_fkeys 'TableName'
빠르고 간단합니다. 나는 꽤 빨리 모든 외부 키 테이블, 각각의 기둥과 15 개 테이블의 외래 키 이름을 찾을 수 있었다.
@mdisibio 아래에 언급 한 바와 같이, 여기에 사용할 수있는 다른 매개 변수를 자세히 설명 문서에 대한 링크는 다음과 같습니다 https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp- fkeys - 트랜 잭트 SQL
-
==============================
5.나는 외래 키에 관련된 모든 세부 정보를 찾기 위해이 스크립트를 사용하고 있습니다. 나는 INFORMATION.SCHEMA을 사용하고 있습니다. 다음은 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
-
==============================
6.당신이 개체 탐색기 창에서 SSMS를 통해 가고 싶은 경우에, 오른쪽, 당신이 드롭 할 개체를 클릭보기 종속성을한다.
당신이 개체 탐색기 창에서 SSMS를 통해 가고 싶은 경우에, 오른쪽, 당신이 드롭 할 개체를 클릭보기 종속성을한다.
-
==============================
7.여기에 모든 데이터베이스에서 외래 키 관계를 알 수있는 가장 좋은 방법입니다.
여기에 모든 데이터베이스에서 외래 키 관계를 알 수있는 가장 좋은 방법입니다.
exec sp_helpconstraint 'Table Name'
그리고 또 하나의 방법
select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where TABLE_NAME='Table Name' --and left(CONSTRAINT_NAME,2)='FK'(If you want single key)
-
==============================
8.
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;
-
==============================
9.--The 다음은 더 당신이 찾고있는 무엇을 줄 수 있습니다 :
--The 다음은 더 당신이 찾고있는 무엇을 줄 수 있습니다 :
create Procedure spShowRelationShips ( @Table varchar(250) = null, @RelatedTable varchar(250) = null ) as begin if @Table is null and @RelatedTable is null select object_name(k.constraint_object_id) ForeginKeyName, object_name(k.Parent_Object_id) TableName, object_name(k.referenced_object_id) RelatedTable, c.Name RelatedColumnName, object_name(rc.object_id) + '.' + rc.name RelatedKeyField from sys.foreign_key_columns k left join sys.columns c on object_name(c.object_id) = object_name(k.Parent_Object_id) and c.column_id = k.parent_column_id left join sys.columns rc on object_name(rc.object_id) = object_name(k.referenced_object_id) and rc.column_id = k.referenced_column_id order by 2,3 if @Table is not null and @RelatedTable is null select object_name(k.constraint_object_id) ForeginKeyName, object_name(k.Parent_Object_id) TableName, object_name(k.referenced_object_id) RelatedTable, c.Name RelatedColumnName, object_name(rc.object_id) + '.' + rc.name RelatedKeyField from sys.foreign_key_columns k left join sys.columns c on object_name(c.object_id) = object_name(k.Parent_Object_id) and c.column_id = k.parent_column_id left join sys.columns rc on object_name(rc.object_id) = object_name(k.referenced_object_id) and rc.column_id = k.referenced_column_id where object_name(k.Parent_Object_id) =@Table order by 2,3 if @Table is null and @RelatedTable is not null select object_name(k.constraint_object_id) ForeginKeyName, object_name(k.Parent_Object_id) TableName, object_name(k.referenced_object_id) RelatedTable, c.Name RelatedColumnName, object_name(rc.object_id) + '.' + rc.name RelatedKeyField from sys.foreign_key_columns k left join sys.columns c on object_name(c.object_id) = object_name(k.Parent_Object_id) and c.column_id = k.parent_column_id left join sys.columns rc on object_name(rc.object_id) = object_name(k.referenced_object_id) and rc.column_id = k.referenced_column_id where object_name(k.referenced_object_id) =@RelatedTable order by 2,3 end
-
==============================
10.또한 @LittleSweetSeas 응답을 adapating하여 외부 키에 대한 모든 정보를 반환 할 수 있습니다 :
또한 @LittleSweetSeas 응답을 adapating하여 외부 키에 대한 모든 정보를 반환 할 수 있습니다 :
SELECT OBJECT_NAME(f.parent_object_id) ConsTable, OBJECT_NAME (f.referenced_object_id) refTable, 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 order by ConsTable
-
==============================
11.SQL Server 관리 Studio에서 당신은 오른쪽에서 테이블을 클릭 할 수 있습니다 개체 탐색기 및 "보기 종속성"을 선택합니다. 이것은 당신을 줄 것이다 좋은 출발점. 이는 테이블, 뷰, 절차 및 그 기준을 도시 탁자.
SQL Server 관리 Studio에서 당신은 오른쪽에서 테이블을 클릭 할 수 있습니다 개체 탐색기 및 "보기 종속성"을 선택합니다. 이것은 당신을 줄 것이다 좋은 출발점. 이는 테이블, 뷰, 절차 및 그 기준을 도시 탁자.
-
==============================
12.다음 쿼리를 시도합니다.
다음 쿼리를 시도합니다.
select object_name(sfc.constraint_object_id) AS constraint_name, OBJECT_Name(parent_object_id) AS table_name , ac1.name as table_column_name, OBJECT_name(referenced_object_id) as reference_table_name, ac2.name as reference_column_name from sys.foreign_key_columns sfc join sys.all_columns ac1 on (ac1.object_id=sfc.parent_object_id and ac1.column_id=sfc.parent_column_id) join sys.all_columns ac2 on (ac2.object_id=sfc.referenced_object_id and ac2.column_id=sfc.referenced_column_id) where sfc.parent_object_id=OBJECT_ID(<main table name>);
이것은 constraint_name을, 참조되고 제약 조건에 따라됩니다 테이블이있을 것 COLUMN_NAMES을 줄 것이다.
-
==============================
13.당신은 외래 키 제약 조건을 표시하려면이 쿼리를 사용할 수 있습니다 :
당신은 외래 키 제약 조건을 표시하려면이 쿼리를 사용할 수 있습니다 :
SELECT K_Table = FK.TABLE_NAME, FK_Column = CU.COLUMN_NAME, PK_Table = PK.TABLE_NAME, PK_Column = PT.COLUMN_NAME, Constraint_Name = C.CONSTRAINT_NAME FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME INNER JOIN ( SELECT i1.TABLE_NAME, i2.COLUMN_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1 INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY' ) PT ON PT.TABLE_NAME = PK.TABLE_NAME ---- optional: ORDER BY 1,2,3,4 WHERE PK.TABLE_NAME='YourTable'
http://blog.sqlauthority.com/2006/11/01/sql-server-query-to-display-foreign-key-relationships-and-name-of-the-constraint-for-each-table-에서 촬영 에서 데이터베이스 /
-
==============================
14.테이블이를 위해 가장 쉬운 방법은 기본 키와 외래 키를 얻을 수 있습니다 :
테이블이를 위해 가장 쉬운 방법은 기본 키와 외래 키를 얻을 수 있습니다 :
/* Get primary key and foreign key for a table */ USE DatabaseName; SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE CONSTRAINT_NAME LIKE 'PK%' AND TABLE_NAME = 'TableName' SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE CONSTRAINT_NAME LIKE 'FK%' AND TABLE_NAME = 'TableName'
from https://stackoverflow.com/questions/17501840/how-can-i-find-out-what-foreign-key-constraint-references-a-table-in-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 SQL 명령문 작업 존재? (0) | 2020.06.20 |
---|---|
[SQL] CTE 쿼리에서 SELECT * INTO 임시 테이블에 임시 테이블을 만드는 방법 (0) | 2020.06.20 |
[SQL] 이 SQL 서버에 존재하는 경우에만 어떻게 외래 키 제약 조건을 삭제합니까? (0) | 2020.06.20 |
[SQL] SQL Server 데이터베이스에있는 모든 데이터를 삭제 (0) | 2020.06.20 |
[SQL] 어떻게하지 널 확인하고 SQL 서버에 빈 문자열은 아닌가하는? (0) | 2020.06.20 |