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),
);
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top