2017-08-17 9 views
1

私のAfterParse_CA_EventsにErrorMessage Columnを追加します。だから私は私のテーブルのために欠けているデータを見ることができます。TsqlでErrorMessageを作成します

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] 

ここにはすべての列があります。 LSCI_DateOfRecord、CFI、RecordDate、EffectiveDate、DueBillRdmDate、PaymentDate、CUSIP、Symbol2、ExDividendDateをチェックしたいと思います。いずれかの列にデータがない場合(null)、ErrorMessage列に列名を表示します。

私はLSCI_DateOfRecordの簡単なクエリを書いていますが、複数の列にデータがない場合、エラーメッセージの作成方法はわかりません。

LSCI_DateOfRecordとDueBillRdmDateの両方がnullの場合、ErrorMessageを 'LSCI_DateOfRecord DueBillRdmDate missing'のようにします。

私のコード:

--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 

いずれかがこれで私を助けてもらえます。

答えて

1

これを正しく実行していれば、それらを連結するだけです。挿入時にチェックを行わない限り、列はDBに保持されません。つまり、トリガーやデータの挿入に使用していた場合、挿入されている値を確認するか、更新時にフォローする必要があります。

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 

または更新に...ここ

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

重要なノートがelse ''です。デフォルトでは、elseはNULLNULL + <anything> = NULLとなるため、私はこれを行いました。例:

select null + 'someString' 
+0

あなたは答えが優れています。ありがとうございます.-) – Rachel

+0

@Rachel – scsimon