/ / So löschen und erstellen Sie Primärschlüssel und Fremdschlüssel neu - SQL-Server

So können Sie Primärschlüssel und Fremdschlüssel löschen und neu erstellen - sql-server

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 № 1

Um 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! ))