2012-05-14 21 views
1

我期待通过存储过程,看到很多线,如:除ISDATE之外,检查LEN和ISNULL是否有用?

case when len(isnull(INVOICE.INVOICE_DATE,'')) > 0 
     and isdate(INVOICE.INVOICE_DATE) = 1 
    then convert(datetime,INVOICE.INVOICE_DATE) 
    else null end 

case when len(isnull(SHIPMENT.NET_AMOUNT_DUE,'')) > 0 
     and isnumeric(SHIPMENT.NET_AMOUNT_DUE) = 1 
    then convert(money,SHIPMENT.NET_AMOUNT_DUE) 
    else null end 

我不明白为什么ISNULLLEN检查是永远存在的。我缺少一些好处吗?相反,对代码当前的编写方式是否有任何不利影响?

+2

你应该问更大的问题是,“为什么不INVOICE_DATE日期/时间类型?“ –

+0

@AaronBertrand我仍然深入研究整个过程,但本质上这是大量输入的一部分,数据来自XML。它看起来以前它是作为'varchar'直接拉入的,然后在这一点检查类型。 –

回答

6

LENISNULL检查不需要。

ISDATEISNUMERIC将返回0如果值为NULL或空,所以这只是不需要。可能有人是额外格外谨慎...

这些可以写为:

case when ISDATE(INVOICE.INVOICE_DATE) = 1 
    then convert(datetime,INVOICE.INVOICE_DATE) 
    else null end 

和:

case when ISNUMERIC(SHIPMENT.NET_AMOUNT_DUE) = 1 
    then convert(money,SHIPMENT.NET_AMOUNT_DUE) 
    else null end 
相关问题