Este erro é gerado ao tentar criar uma tabela com uma coluna computada de um Date
campo.
Choque de tipo de operando: int é incompatível com data
Se eu comentar a coluna computada, ela funciona.
[DateInActive][Date] NULL, -- Date origination
[IsValid] AS (IsNull(DateInActive, 1)) -- Failure here
O pensamento IsValid
é simplesmente retornar um bit
on|off para este campo para significar que nenhuma data inativa foi relatada e, em caso afirmativo, é válida.
A coluna será passada para JSON em uma For JSON
saída como um is-a
campo para uso fora do SQL.
SQL completo
CREATE TABLE [history].[PhoneBook](
[PhoneBookId] [int] IDENTITY(1,1) NOT NULL,
[PersonId] [int] NOT NULL,
[PhoneId] [int] NOT NULL,
[DateActive][Date] NOT NULL,
[DateInActive][Date] NULL,
[IsValid] AS (IsNull(DateInActive, 1))
CONSTRAINT [PK_PhoneBook_1] PRIMARY KEY CLUSTERED
(
[PersonId] ASC,
[PhoneId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
De acordo com a
ISNULL
documentação, o tipo de dados retornado é do mesmo tipo que a expressão de verificação, que é o tipodate
de dados neste caso. AISNULL
expressão falha porque o literal inteiro 1 não pode ser convertido implicitamente em data.Para retornar um bit indicando se a coluna de data é ou não
NULL
, você pode usar uma expressão CASE: