2017-12-21 24 views
0

UPDATE_RULE을 외래 키 제약 조건으로 설정하고 데이터베이스에서 'NO ACTION'으로 설정하고이 규칙을 'CASCADE'으로 변경하려고합니다. 그래서, 먼저 제약 조건을 삭제하고 다시 추가해야한다는 것을 알고 있습니다.SQL 서버 - 동적으로 모든 외래 키 제약 조건을 변경합니다.

이렇게하려면 다음 쿼리를 사용하여 모든 관련 제약 조건을 얻은 다음 각 행을 반복하고 제약 조건을 삭제하는 동적 SQL 쿼리를 작성한 다음 다시 추가하십시오. UPDATE_RULE 값.

그러나 제약 조건을 추가하려면 기본 키가 정의 된 테이블 이름이 필요하며 쿼리에이 테이블 이름이 필요하지 않습니다. 외래 키가있는 테이블 이름 만 있습니다 :

SELECT * 
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS RC 
INNER JOIN INFORMATION_SCHEMA.table_constraints AS CU 
    ON CU.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG 
    AND CU.CONSTRAINT_NAME = RC.CONSTRAINT_NAME 
WHERE UPDATE_RULE = 'NO ACTION' 

어떻게해야합니까? UPDATE_RULE 값만 변경하면됩니다.

답변

0

대답은 여기에서 발견되었다 : https://dba.stackexchange.com/questions/31720/find-the-foreign-keys-associated-with-a-given-primary-key

SELECT 
o1.name AS FK_table, 
c1.name AS FK_column, 
fk.name AS FK_name, 
o2.name AS PK_table, 
c2.name AS PK_column, 
pk.name AS PK_name, 
fk.delete_referential_action_desc AS Delete_Action, 
fk.update_referential_action_desc AS Update_Action 
FROM sys.objects o1 
INNER JOIN sys.foreign_keys fk 
    ON o1.object_id = fk.parent_object_id 
INNER JOIN sys.foreign_key_columns fkc 
    ON fk.object_id = fkc.constraint_object_id 
INNER JOIN sys.columns c1 
    ON fkc.parent_object_id = c1.object_id 
    AND fkc.parent_column_id = c1.column_id 
INNER JOIN sys.columns c2 
    ON fkc.referenced_object_id = c2.object_id 
    AND fkc.referenced_column_id = c2.column_id 
INNER JOIN sys.objects o2 
    ON fk.referenced_object_id = o2.object_id 
INNER JOIN sys.key_constraints pk 
    ON fk.referenced_object_id = pk.parent_object_id 
    AND fk.key_index_id = pk.unique_index_id 
ORDER BY o1.name, o2.name, fkc.constraint_column_id