Как применить NOT NULL в вычисляемом столбце представления - PullRequest
2 голосов
/ 04 августа 2010

Я хочу изменить вид следующим образом:

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 равно "not null", я хочу, чтобы columnThree также было "not null". Это возможно, невозможно, неявно, бесполезно или может привести к серьезным проблемам, так как columnOne - это char (2), заполненный только алгоритмами.

Я просто хотел бы знать синтаксис

Ответы [ 4 ]

4 голосов
/ 04 августа 2010

ColumnThree никогда не будет нулевым, если сам источник приведения никогда не будет нулевым.Однако это не означает, что вы не получите исключение, если 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
4 голосов
/ 04 августа 2010

Если для column1 установлено значение NOT NULL, то column3 не может быть NULL, поэтому об этом не нужно беспокоиться.

4 голосов
/ 04 августа 2010

Вы можете использовать ISNULL() для обеспечения значения по умолчанию, когда ноль.

ALTER VIEW [dbo].[ViewOne] as   
SELECT columnOne,  -- not null   
       columnTwo, --not null 
      ISNULL((convert(decimal(2,0), columnOne)),0.00) as columnThree
FROM DBOne.TableOne 
0 голосов
/ 04 августа 2010

Как вы применяете это, зависит от ваших бизнес-правил.

Хотите, чтобы эти строки не отображались в результатах просмотра? Затем добавьте эти критерии к предложению WHERE.

Хотите использовать значение по умолчанию, если столбец будет NULL? Затем используйте COALESCE, чтобы вернуть значение по умолчанию для NULL (просто не забудьте указать псевдоним столбца).

Хотите ли вы вернуть ошибку, если в базовую (-ые) таблицу (-ы) вставлена ​​строка, которая может вызвать такую ​​вещь? В этом случае я бы наложил ограничение на базовые таблицы. Если ваш взгляд включает в себя СОЕДИНЕНИЯ и агрегаты, то это может быть сложно, но без конкретного примера я действительно не могу помочь в этом.

В любом случае для вашего конкретного примера вы не должны видеть никаких значений NULL, так как columnOne не равно NULL.

...