2017-08-17 61 views
1

我想要一個的ErrorMessage列添加到我的AfterParse_CA_Events。所以我可以看到我的表中缺少哪些數據。撰寫的ErrorMessage在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] 

這裏是我所有的專欄。我要檢查LSCI_DateOfRecord,CFI,RecordDate,EFFECTIVEDATE,DueBillRdmDate,PAYMENTDATE,CUSIP,Symbol2和除息日。如果任一列缺少數據(空),我想在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

你是做正確,你只需要Concat的他們。除非您對插入進行了檢查,否則該列不會保留在數據庫中。也就是說,對於觸發器或者您用來插入數據的內容,您必須檢查插入的值,或者執行更新。

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 ''。我這樣做是因爲默認情況下,否則會NULLNULL + <anything> = NULL。例如:

select null + 'someString' 
+0

你的答案是優秀的。非常感謝scsimon。:-) – Rachel

+0

不用擔心在所有@Rachel – scsimon