2017-08-17 26 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