Ich habe eine Datenbank, die eine Liste von enthältPrimärschlüssel und Fremdschlüssel. Ich möchte alle Fremdschlüssel und Primärschlüssel löschen und beide Schlüssel neu erstellen. Ab sofort konnte ich Primärschlüssel löschen und neu erstellen, aber die Fremdschlüssel nach dem Löschen nicht hinzufügen. Ich erhalte nicht alle Fremdschlüssel nach dem Löschen und Neuerstellen.
--abfrage, um alle Fremdschlüssel mit drop-Anweisung zu erhalten
SELECT "IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N""" + QUOTENAME(SCHEMA_NAME()) + "." + QUOTENAME(fk.name) + """) AND parent_object_id = OBJECT_ID(N""" + QUOTENAME(SCHEMA_NAME()) + "." + QUOTENAME(so.name) + """))" + CHAR(13)
+ "ALTER TABLE " + QUOTENAME(SCHEMA_NAME()) + "." + QUOTENAME(so.name) + " DROP CONSTRAINT " + QUOTENAME(fk.name) + ""
FROM sys.foreign_keys fk
inner join sys.sysobjects so ON (fk.parent_object_id = so.id)
--abfrage, um alle Fremdschlüssel mit der Add-Anweisung abzurufen
SELECT "ALTER TABLE " + QUOTENAME(SCHEMA_NAME()) + "." + QUOTENAME(spo.Name) + " WITH CHECK ADD CONSTRAINT " + QUOTENAME(fk.name) + " FOREIGN KEY(" + QUOTENAME(fkpc.name) + ") REFERENCES " + QUOTENAME(SCHEMA_NAME()) + "." + QUOTENAME(sro.name) + " (" + QUOTENAME(fkrc.name) + ")" + CHAR(13)
+ "ALTER TABLE " + QUOTENAME(SCHEMA_NAME()) + "." + QUOTENAME(spo.name) + " CHECK CONSTRAINT " + QUOTENAME(fk.name) + "" + CHAR(13) + CHAR(13)
FROM sys.foreign_keys fk
INNER JOIN sys.sysobjects spo on (fk.parent_object_id = spo.id)
INNER JOIN sys.sysobjects sro on (fk.referenced_object_id = sro.id)
INNER JOIN sys.foreign_key_columns fkc on (fk.object_id = fkc.constraint_object_id)
INNER JOIN sys.all_columns fkpc on (fkc.parent_object_id = fkpc.object_id and fkc.parent_column_id = fkpc.column_id)
INNER JOIN sys.all_columns fkrc on (fkc.referenced_object_id = fkrc.object_id and fkc.referenced_column_id = fkrc.column_id)
Antworten:
0 für die Antwort № 1Um alle Fremdschlüssel zu löschen, können Sie versuchen, dieses Skript zu verwenden:
while(exists(select 1 from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE="FOREIGN KEY"))
begin
declare @constraints nvarchar(2000)
SELECT TOP 1 @constraints=("ALTER TABLE " + TABLE_SCHEMA + ".[" + TABLE_NAME + "] DROP CONSTRAINT [" + CONSTRAINT_NAME + "]")
FROM information_schema.table_constraints
WHERE CONSTRAINT_TYPE = "FOREIGN KEY"
exec (@constraints)
PRINT @constraints
end
GO
Vergessen Sie nicht, es in Ihrer Datenbank auszuführen! ))