我想按如下方式更改视图:

ALTER VIEW [dbo].[ViewOne] as
SELECT columnOne,  -- not null
       columnTwo, --not null
      (convert(decimal(2,0), columnOne)) as columnThree -- I want this not to be NULL
FROM DBOne.TableOne


由于columnOne为“不为空”,所以我也要强制columnThree为“不为空”。
因为columnOne仅使用算法填充char(2),所以它是可能的,不可能的,隐式的,无用的或可能导致严重的问题。

我只是想知道语法

最佳答案

如果Cast的来源本身永远不会为null,则ColumnThree将永远不会为null。但是,这并不意味着如果无法将ColumnOne强制转换为decimal(2,0),您将不会获得异常,并且在查询视图之前,您将不知道是否会获得异常。您应该考虑添加其他检查以确定转换是否会失败并有助于减轻转换错误的可能性:

Alter View dbo.ViewOne
As
Select ColumnOne, ColumnTwo
    , Case
        When IsNumeric( ColumnOne ) = 0 Then 0
        Else Cast( ColumnOne As decimal(2,0) )
        End As ColumnThree

10-08 13:20