Criando e modificando restrições CHECK
Você pode criar uma restrição CHECK como parte da definição de tabela ao criar a tabela. Se a tabela já existir, será possível adicionar uma restrição CHECK. Tabelas e colunas podem conter várias restrições CHECK.
Se já existir uma restrição CHECK, é possível modificá-la ou excluí-la. Por exemplo, talvez você deseje modificar a expressão usada pela restrição CHECK em uma coluna da tabela.
Observação |
---|
Para modificar a restrição CHECK, primeiro exclua a restrição CHECK e, em seguida, recrie-a com a nova definição. |
O seguinte exemplo de Transact-SQL cria uma nova tabela e, em seguida, modifica a tabela adicionando uma restrição CHECK à coluna CreditRating.
IF OBJECT_ID ('dbo.Vendors', 'U') IS NOT NULL
DROP TABLE dbo.Vendors;
GO
CREATE TABLE dbo.Vendors
(VendorID int PRIMARY KEY, VendorName nvarchar (50),
CreditRating tinyint)
GO
ALTER TABLE dbo.Vendors ADD CONSTRAINT CK_Vendor_CreditRating
CHECK (CreditRating >= 1 AND CreditRating <= 5)
Exclua a restrição CHECK para remover as limitações a valores de dados aceitos na coluna (ou colunas) incluída na expressão de restrição.
Criar uma restrição CHECK ao criar uma tabela
Criar uma restrição CHECK em uma tabela existente
Excluir uma restrição CHECK
Forçando uma restrição CHECK usando WITH NOCHECK
Quando uma restrição CHECK é adicionada a uma tabela existente, ela pode ser aplicada somente aos novos dados ou aos dados existentes. Por padrão, a restrição CHECK aplica-se a ambos. Use a opção WITH NOCHECK da instrução ALTER TABLE para aplicar a nova restrição somente aos dados recém-criados. Essa opção é útil quando os dados existentes já atendem à nova restrição FOREIGN KEY ou quando uma regra de negócios exige que a restrição seja imposta apenas desse ponto em diante.
Por exemplo, uma restrição anterior pode exigir que os códigos postais fiquem restritos a cinco dígitos, mas a nova restrição limita os códigos postais a nove dígitos. Os dados antigos com códigos postais de cinco dígitos ainda serão válidos e coexistirão com os novos dados que contêm códigos postais de nove dígitos. Portanto, apenas os dados novos devem ser verificados em comparação com a nova restrição.
Entretanto, seja cauteloso ao adicionar uma restrição sem verificação porque dessa forma você está ignorando os controles do Mecanismo de Banco de Dados que impõem as regras de integridade para a tabela.
Impedir a verificação dos dados existentes ao criar uma restrição CHECK
Desabilitando restrições CHECK
É possível desabilitar restrições CHECK existentes para determinadas operações, como operações INSERT, UPDATE e o processamento de replicação.
Instruções INSERT e UPDATE
A desabilitação de uma restrição CHECK permite a modificação dos dados da tabela sem a validação feita pelas restrições. Desabilite a restrição CHECK durante as instruções INSERT e UPDATE se os novos dados violarem a restrição ou se a restrição tiver que ser aplicada somente aos dados que já estão no banco de dados.
Processamento de replicação
Desabilite uma restrição CHECK durante a replicação se a restrição for específica para o banco de dados de origem. Quando uma tabela é replicada, sua definição e seus dados são copiados do banco de dados de origem para o banco de dados de destino. Normalmente, mas não necessariamente, esses dois bancos de dados ficam em servidores separados. Se as restrições CHECK forem específicas do banco de dados de origem, mas não estiverem desabilitadas durante a replicação, elas podem impedir, desnecessariamente, a inserção de novos dados no banco de dados de destino. Para obter mais informações, consulte Controlando restrições, identidades e gatilhos com NOT FOR REPLICATION.
Desabilitar uma restrição CHECK de instruções INSERT e UPDATE
Desabilitar uma restrição CHECK de replicação
Obter informações sobre restrições CHECK