Eu tenho uma tabela (SQL Server) que contém 3 tipos de resultados: FLOAT, NVARCHAR(30) ou DATETIME (3 colunas separadas). Quero garantir que, para qualquer linha, apenas uma coluna tenha um resultado e as outras colunas sejam NULL. Qual é a restrição de verificação mais simples para conseguir isso?
O contexto para isso é tentar adaptar a capacidade de capturar resultados não numéricos em um sistema existente. Adicionar duas novas colunas à tabela com uma restrição para evitar mais de um resultado por linha foi a abordagem mais econômica, não necessariamente a correta.
Atualização: Desculpe, tipo de dados snafu. Infelizmente eu não pretendia que os tipos de resultados indicados fossem interpretados como tipos de dados do SQL Server, apenas termos genéricos, corrigidos agora.
O seguinte deve fazer o truque:
Você provavelmente precisará fazer três testes dentro da restrição, um teste para cada par que deseja que seja nulo e outro para a coluna que não deve ser nula:
Aqui está uma solução do PostgreSQL usando as funções de array integradas :
PARA POSTGRESQL
Convertemos a coluna em booleano com IS NOT NULL ( true ou false ), depois convertemos em :: integer ( 0 ou 1 ) Podemos então usar operadores aritméticos