mam kolumna obliczana, że muszę być polem bit, tu przykład o wzorze:W jaki sposób można wymusić typ danych w kolumnie obliczeniowej na pole bitowe, które nie pozwala na wartości null?
case when ([some_field] < [Some_Other_field])
then 0
else 1
end
Typ danych obliczonego zestawu kolumn przy użyciu tej formuły jest int
.
Jaki jest najlepszy sposób wymuszenia prawidłowego typu danych?
Z CONVERT
oświadczenia o całej sprawie, typ danych jest bit
ale Allow Nulls
CONVERT([bit],
case when (([some_field] < [Some_Other_field])
then 0
else 1
end,
0)
samo z CONVERT
oświadczenie w sprawie wyrażenia rezultatu, typ danych jest bit
ale Allow Nulls
case when (([some_field] < [Some_Other_field])
then CONVERT([bit], (0), 0)
else CONVERT([bit], (1), 0)
end
Czy jest na to mądrzejszy sposób?
Czy ty lub ktoś ma pomysł, czy istnieją różnice w wynikach pomiędzy swoim przykładem i następujące alternatywy składnia: 'przypadek kiedy ([some_field] <[Some_Other_field]) następnie ISNULL (CONVERT (bit 0) , 0) inaczej ISNULL (CONVERT (bit, 1), 1) end'? – tomosius
@tomosius - Nie spodziewałbym się * wymiernej * różnicy w wielkim schemacie rzeczy (np. Koszty I/O związane z dostępem do danych i obciążeniami sieciowymi). Podejrzewam też, że twój wariant może ponownie wprowadzić problem, którego nie dotyczyło, i że niektóre wyrażenia "CASE" są często analizowane jako potencjalnie nie do zniesienia, mimo że przez inspekcję wiemy, że nie mogą tego zrobić. –