NOCHECK deaktiviert keine Fremdschlüsselreferenzen
Skript zur Tabellenerstellung:
CREATE TABLE [dbo].[details](
[id] [int] NULL,
[details] [varchar](max) NULL
)
CREATE TABLE [dbo].[name](
[id] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[name] [varchar](max) NULL,
CONSTRAINT [PK__name__3213E83F0D384EE4] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
ALTER TABLE [dbo].[details] WITH NOCHECK ADD CONSTRAINT [id] FOREIGN KEY([id])
REFERENCES [dbo].[name] ([id])
GO
ALTER TABLE [dbo].[details] NOCHECK CONSTRAINT [id]
GO
Tabellenpopulationsskript
insert into name(name) values (newid())
go 100
insert into details (id,details) values(RAND()*10,newid())
Go 1000
Skript zum Abschneiden von Tabellen
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
EXEC sp_msforeachtable "truncate table ?"
EXEC sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
Genommen vonWie können Fremdschlüsseleinschränkungen mit T-SQL vorübergehend deaktiviert werden?
Auch ausprobiert
alter table name nocheck constraint all
truncate table name
In beiden Fällen kann ich die Tabelle nicht abschneiden, da eine Fremdschlüsselreferenz vorhanden ist
Fehlermeldung:
Die Tabelle 'dbo.name' kann nicht abgeschnitten werden, da auf sie von einer FOREIGN KEY-Einschränkung verwiesen wird.
Gibt es eine Möglichkeit, FK-Einschränkungen zu deaktivieren, alle Daten in der Datenbank zu löschen und Identitäten neu zu initialisieren und dann FK-Einschränkungen wieder zu aktivieren?