No Pesquisador de objetos do SQL Server, ao selecionar e criar scripts de uma restrição de chave estrangeira, o código a seguir é gerado.
USE [MyTestDatabase]
GO
ALTER TABLE [dbo].[T2] WITH NOCHECK ADD CONSTRAINT [FK_T2_T1] FOREIGN KEY([T1ID])
REFERENCES [dbo].[T1] ([T1ID])
GO
ALTER TABLE [dbo].[T2] CHECK CONSTRAINT [FK_T2_T1]
GO
Qual é o objetivo da última declaração "ALTER TABLE CHECK CONSTRAINT"? Não parece importar se é executado ou não. Ele não falha nos dados incorretos existentes, nem altera que a restrição será aplicada a novos dados.
Obrigado!
fonte
Sua primeira instrução cria uma restrição desabilitada. Ele precisa estar ativado e possivelmente confiável. A seguinte sintaxe estranha garantirá que sua restrição esteja ativada e confiável:
Existe uma publicação muito boa de Hugo Kornelis no blog que explica em detalhes: Você pode confiar em suas restrições
fonte