2017-12-21 15 views
0

Ich versuche, alle Fremdschlüsseleinschränkungen mit UPDATE_RULE in der Datenbank auf festgelegt zu ändern, und ändern Sie diese Regel zu 'CASCADE'. Also, ich weiß, ich sollte zuerst diese Einschränkung fallen lassen und neu hinzufügen.Sql-Server - alle Fremdschlüsseleinschränkungen dynamisch ändern Update_Rule

Um dies zu tun, habe ich die folgende Abfrage versucht, alle relevanten Einschränkungen zu erhalten, und dann jede Zeile iterieren und eine dynamische SQL-Abfrage erstellen, die die Einschränkung fallen lassen, und wird es nur mit einem anderen UPDATE_RULE neu hinzufügen Wert.

Um jedoch die Einschränkung hinzuzufügen, brauche ich den Tabellennamen, wo der Primärschlüssel definiert ist, und ich habe es nicht in meiner Abfrage. Ich habe nur den Namen der Tabelle, wo der Fremdschlüssel:

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' 

Irgendwelche Vorschläge, wie es zu tun? Ich muss nur die Bedingung UPDATE_RULE Wert ändern.

Antwort

0

Antwort wurde hier gefunden: 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