Verifique a restrição em várias colunas
-
26-09-2019 - |
Pergunta
Eu uso o SQL Server 2008
Uso uma restrição de verificação em várias colunas na mesma tabela para tentar validar a entrada de dados.
Eu recebo um erro:
Restrição de verificação da coluna para coluna 'aaaa' faz referência a outra coluna, tabela 'xxxx'.
Verifique a restrição não funciona dessa maneira.
Alguma outra maneira de implementar isso em uma única tabela sem usar o FK?
Obrigado
Aqui um exemplo do meu código
CREATE TABLE dbo.Test
(
EffectiveStartDate dateTime2(2) NOT NULL,
EffectiveEndDate dateTime2(2) NOT NULL
CONSTRAINT CK_CmsSponsoredContents_EffectiveEndDate CHECK (EffectiveEndDate > EffectiveStartDate),
);
Solução
Sim, defina a restrição de verificação no tabela nível
CREATE TABLE foo (
bar int NOT NULL,
fred varchar(50) NOT NULL,
CONSTRAINT CK_foo_stuff CHECK (bar = 1 AND fred ='fish')
)
Você está declarando isso em linha como um coluna restrição
...
fred varchar(50) NOT NULL CONSTRAINT CK_foo_fred CHECK (...)
...
Editar, mais fácil de postar do que descrever. Corrigido suas vírgulas.
CREATE TABLE dbo.Test
(
EffectiveStartDate dateTime2(2) NOT NULL,
EffectiveEndDate dateTime2(2) NOT NULL, --need comma
CONSTRAINT CK_CmsSponsoredContents_EffectiveEndDate CHECK (EffectiveEndDate > EffectiveStartDate) --no comma
);
Obviamente, a pergunta permanece você usando uma restrição de verificação onde deve ser uma restrição de FK ...?
Outras dicas
Verifique as restrições podem se referir a uma única coluna ou a todo o registro.
Use esta sintaxe para restrições de nível de registro:
ALTER TABLE MyTable
ADD CONSTRAINT MyCheck
CHECK (...your check expression...)
Você pode simplesmente aplicar sua validação em um gatilho na tabela, especialmente que, de qualquer maneira, a operação será revertida se a verificação falhar.