Подтвердить что ты не робот

Как я могу заставить тип данных вычисленного столбца в поле бит, которое не допускает null?

Я получил вычисляемый столбец, что мне нужно быть полем бит, вот пример формулы:

case when ([some_field] < [Some_Other_field]) 
then 0 
else 1 
end

Тип данных для набора вычисляемых столбцов с использованием этой формулы: int.

Какой лучший способ заставить правильный тип данных?

С оператором CONVERT для всего случая тип данных bit, но он Allow Nulls

CONVERT([bit], 
        case when (([some_field] < [Some_Other_field]) 
        then 0 
        else 1 
        end,
        0)

То же самое с оператором CONVERT в выражениях результатов, тип данных bit, но он Allow Nulls

case when (([some_field] < [Some_Other_field]) 
then CONVERT([bit], (0), 0) 
else CONVERT([bit], (1), 0) 
end

Или есть более умный способ сделать это?

4b9b3361

Ответ 1

Оберните определение вычисленного столбца в ISNULL с тем, что вам нравится в качестве второго аргумента (при условии, что оно немного или конвертируется в такой).

Это одно из немногих мест, где вам нужно использовать ISNULL, а не (как правило, лучше разработанный) COALESCE. SQL Server имеет специальную логику case, чтобы понять, что ISNULL с ненулевым вторым аргументом представляет результат, не содержащий NULL.

например:.

ISNULL(CONVERT(bit,case when ([some_field] < [Some_Other_field]) 
then 0 
else 1 
end),0)

Это также может быть использовано, например, просматривать определения.

Ответ 2

Если вы сохраняете вычисленный столбец, вы можете указать not null. http://msdn.microsoft.com/en-us/library/ms186241.aspx

CONVERT([bit], 
        case when (([some_field] < [Some_Other_field]) 
        then 0 
        else 1 
        end,
        0) PERSISTED NOT NULL