Array
(
)

Utiliando quot;OUquot; em uma substring dentro de uma Trig

Kika3k
   - 28 mai 2008

Bom dia !!

Td blz galera ? :D

Criei uma trigger no sql server 2005 que atualiza o campo data de uma determinada tabela depois que eu extraio valores de documentos XMLs e os insiro no
banco.

OBS.: a data não é digitada no banco, mas sim extraída do campo FileSystem (varchar) e se encontra no seguinte
formato: CATARINE2007101045020.xml, onde CATARINE é o nome de quem criou o xml e 20071010 é a data.

#Código

CREATE TRIGGER TR_DATAPROCESSAMENTO
ON NotaFiscal
AFTER INSERT
AS 

UPDATE NotaFiscal

SET DataProcessamento = (SELECT CAST( substring(Right(FileSystem,18),7,2) + ´/´ +
                                              substring(Right(FileSystem,18),5,2) + ´/´ + 
              substring(Right(FileSystem,18),1,4) AS DATETIME) 
                                   FROM INSERTED ) 
                          WHERE ID_NotaFiscal = ( SELECT ID_NotaFiscal FROM INSERTED )


Até ai, tudo bem, a trigger funciona perfeitamente, mas em determinado momento ela não consegue extrair o
campo data perfeitamente. MOTIVO : as datas(normalmente) vem com o formato yyyymmdd, mas em alguns casos estão yyyymdd.
Como eu faço pra fazer um ´OU´ nas substrings na trigger abaixo :

#Código
substring(Right(FileSystem,18),5,2)||substring(Right(FileSystem,18),5,1) + ´/´ +


Porém não funciona !
Alguém tem uma dica ?

Abraços !
:D

Emerson
   - 28 mai 2008

faça a leitura das partes da data em variáveis.

algo assim:

#Código

@Data = Left(Rigth(FileSystem,17),9);
@Dia = Right(@Data, 2);
@Ano = Left(@Data, 4);
@Mes = Substring(@Data, 5, 2);

UPDATE NotaFiscal
SET DataProcessamento = (SELECT CAST(@Mes + ´/´ + @Dia + ´/´ + @Ano AS DATETIME) FROM INSERTED
                         WHERE ID_NotaFiscal = ( SELECT ID_NotaFiscal FROM INSERTED )
daí você faz o tratamento nas variáveis até encontrar o valor correto.