Perché dovrei aggiungere CHECK CONSTRAINT?

4

Segue una tabella che crea uno script creato da Entity Framework utilizzando il modello mostrato in link .

In questo script, ci sono due alter dichiarazioni. Qual è la necessità della seconda istruzione ALTER?

SCRIPT

CREATE TABLE [dbo].[SellingItems_Book](
[Title] [nvarchar](max) NULL,
[Id] [int] NOT NULL,
 CONSTRAINT [PK_SellingItems_Book] 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]

GO

Primo Alter

 ALTER TABLE [dbo].[SellingItems_Book]  WITH CHECK ADD  CONSTRAINT [FK_Book_inherits_SellingItem] FOREIGN KEY([Id])
REFERENCES [dbo].[SellingItems] ([Id])
GO

Second Alter

ALTER TABLE [dbo].[SellingItems_Book] CHECK CONSTRAINT [FK_Book_inherits_SellingItem]
GO
    
posta Lijo 27.07.2012 - 16:11
fonte

3 risposte

2

La seconda istruzione ALTER è superflua perché l'opzione WITH CHECK ADD lo abiliterà. Credo che lo facciano per assicurarsi che il controllo sia abilitato, cosa che fa la seconda affermazione.

    
risposta data 27.07.2012 - 16:18
fonte
1

Potrebbero esserci diversi motivi per spiegare perché la seconda istruzione alternativa è negli script:

  1. Si sta controllando che è stato aggiunto il primo alter vincolo.
  2. Questo script è stato aggiunto automaticamente dallo strumento di generazione di script a scopo di verifica.
risposta data 27.07.2012 - 18:35
fonte
1

Non c'è bisogno della seconda istruzione alter, poiché la prima abiliterà già il vincolo. Potrebbe essere lì perché lo script è stato generato automaticamente, per essere sicuro che sarà abilitato se hai cambiato le impostazioni del server predefinito (che abilita il nuovo vincolo), o se decidi di cambiare il primo alter script.

Per ulteriori informazioni su Alter Statements vedi link

    
risposta data 27.07.2012 - 22:46
fonte

Leggi altre domande sui tag