none
campos calculáveis RRS feed

  • Pergunta

  • Olá a todos, estou com um problema que não sei como resolver.

    Preciso criar um campo calculável persistend para que eu possa, caso necessário, criar um index neste campo.

    ALTER TABLE TESTE_TRIGGER_CAD_DEV
    ADD DTNASC_DEV_02 AS 
    						(
    							CASE WHEN 
    									(DBO.FUN_VALIDACHARTODATE(NASC_DEV) > GETDATE() OR ISDATE(NASC_DEV) = 0)
    								 THEN 
    									'1900/01/01'
    								 ELSE
    									DBO.FUN_VALIDACHARTODATE(NASC_DEV)
    								END
    
    						)
    					  PERSISTED

    Porém, o valor que esse campo recebe vem de uma função e sempre me dá o mesmo erro: Computed column 'DTNASC_DEV_02' in table 'TESTE_TRIGGER_CAD_DEV' cannot be persisted because the column is non-deterministic.

    Pesquisei sobre o erro e o entendi porém ainda assim queria arranjar outro jeito de fazer a indexação da coluna. Pensei em fazer uma CONSTRAINT como vi em um exemplo (abaixo para você verem). Mas ainda não estou conseguindo, talvez por estar errando o código ou por realmente não dar certo. 

    Se alguém puder me ajudar. Abaixo o exemplo que achei na internet e o teste que estou tentando fazer.

    EXEMPLO DA INTERNET 
    
    CREATE TABLE COMPUTED_TABLE 
    (
      id INT IDENTITY NOT NULL ,
      Date_1 DATE
    ) ;
    
    ALTER TABLE DBO.COMPUTED_TABLE 
    ADD DATE_2 DATETIME NOT NULL
    CONSTRAINT DF_computed_table_date_2 DEFAULT (DATEADD(day,30,GETDATE()));

    CONSTRAINT QUE ESTOU TENTANDO FAZER 
    
    
    ALTER TABLE TESTE_TRIGGER_CAD_DEV
    ADD COLUMN DATE_2 AS (CASE WHEN 
    										(FUN_VALIDACHARTODATE(DATE_1) > GETDATE() OR ISDATE(DATE_1) = 0)
    									 THEN 
    										'01/01/1900'
    								ELSE
    								
    									INS.NASC_DEV END
    								)

    quarta-feira, 16 de julho de 2014 18:02

Respostas

  • Mari111,

    Você consegue realizar esta tarefa se incluir estas condições dentro de uma Function Scalar.

    Segue abaixo um modelo:

    ALTER TABLE dbo.TESTE_CAD_DEV
    ADD DATE2 AS dbo.FUN_VALIDACHARTTODATE(DATE1)
    GO
    As demais condições, para retornar a data '01/01/1900' ou a data correta você deve incluir dentro da Function.

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    quinta-feira, 24 de julho de 2014 12:54
    Moderador