2017-08-17 1 views
1

Je souhaite ajouter une colonne ErrorMessage dans mon AfterParse_CA_Events. Donc, je peux voir quelles données sont manquantes pour ma table.Composer ErrorMessage dans Tsql

CREATE TABLE [dbo].[AfterParse_CA_Events](
[EventID] [varchar](32) NOT NULL, 
[MessageID] [bigint] NOT NULL, 
[cdtprFunction] [varchar](32) NULL, 
[CreationDate] [datetime] NULL, 
[MsgDefIdr] [varchar](32) NULL, 
[CFI] [varchar](50) NULL, 
[MndtryVlntryEvtTp] [varchar](32) NULL, 
[EventProcessingType] [varchar](4) NULL, 
[EventType] [varchar](4) NULL, 
[RecordDate] [date] NULL, 
[EffectiveDate] [date] NULL, 
[DueBillRdmDate] [date] NULL, 
[OldQuantity] [varchar](32) NULL, 
[PaymentDate] [date] NULL, 
[LastChangeBy] [varchar](50) NULL, 
[LastChangeDate] [datetime] NULL, 
[EventDescription] [varchar](max) NULL, 
[CUSIP] [varchar](32) NULL, 
[MQ_DateTime] [datetime2](7) NULL, 
[Symbol2] [varchar](32) NULL, 
[AssetClass] [varchar](5) NULL, 
[AssetType] [varchar](5) NULL, 
[DividendType] [varchar](5) NULL, 
[ExDividendDate] [date] NULL, 
[LSCI_DateOfRecord] [date] NULL, 
[RoundingDesc] [varchar](4) NULL, 
[CompleteStatus] [varchar](4) NULL, 
[ErrorMessage] [varchar](100) NULL, 
CONSTRAINT [PK_AfterParse_CA_Events] PRIMARY KEY CLUSTERED 
(
    [EventID] ASC, 
    [MessageID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

Voici toutes les colonnes que j'ai. Je veux vérifier LSCI_DateOfRecord, CFI, RecordDate, EffectiveDate, DueBillRdmDate, PaymentDate, CUSIP, Symbol2 et ExDividendDate. Si l'une des colonnes manque les données (null), je veux afficher le nom de la colonne dans la colonne ErrorMessage.

J'ai écrit une requête simple pour LSCI_DateOfRecord, mais je ne sais pas comment composer le message d'erreur quand il y a plusieurs colonnes de données manquantes.

si les deux LSCI_DateOfRecord et DueBillRdmDate est nulle, je veux le ErrorMessage ressembler "manque LSCI_DateOfRecord DueBillRdmDate.

mon code:

--build the ErrorMessage for AfterParse_CA_Events 
declare @errorMessge varchar(1000) 

select case 
      when ace.LSCI_DateOfRecord IS NULL then ' LSCI_RecordDate' 
      --when ace.DueBillRdmDate IS null then ' DueBillRdmDate' 
      else 'good' 
      end as ErrorMessage 
      ,* 
from AfterParse_CA_Events ace 

Quelqu'un pourrait-il me aider.

Répondre

1

Vous le faisiez correctement, vous avez juste besoin de les concaténer. La colonne ne serait pas conservée dans votre base de données, sauf si vous avez effectué une vérification lors de l'insertion. En d'autres termes, pour les déclencheurs ou tout ce que vous utilisez pour insérer vos données, vous devez vérifier les valeurs insérées ou faire une mise à jour.

select 
    *, 
    ErrorColumn = 
     case when ace.LSCI_DateOfRecord IS NULL then 'LSCI_RecordDate' else '' end 
     + 
     case when ace.DueBillRdmDate IS NULL then 'DueBillRdmDate ' else '' end 
     + 
     ... 
from AfterParse_CA_Events ace 

Ou sur une mise à jour ...

update t 
set t.ErrorColumn = <case statement from above> 
from AfterParse_CA_Events t 

Une remarque importante est ici la else ''. Je l'ai fait parce que par défaut, l'autre serait NULL et NULL + <anything> = NULL. Par exemple:

select null + 'someString' 
+0

Votre réponse est excellente. Merci beaucoup scsimon. :-) – Rachel

+0

Pas de soucis du tout @Rachel – scsimon