我有一个带有计算列的视图现在我需要强制计算列为lightswitch的“not null
”。
我尝试cast()
但我仍然无法将计算列设为“not null
”
可能吗?
这是我的SQL:
SELECT dbo.Nop_Manufacturer.Name,
CAST(SUM(dbo.Nop_OrderProductVariant.PriceExclTax) AS INT) AS
SALES,
CAST(MONTH(dbo.Nop_Order.PaidDate) AS INT) AS
paid_month,
CAST(YEAR(dbo.Nop_Order.PaidDate) AS INT) AS
paid_year,
CAST(COUNT(dbo.Nop_OrderProductVariant.OrderProductVariantID) AS INT)AS
num_prod_sold
FROM dbo.Nop_ProductVariant
INNER JOIN dbo.Nop_OrderProductVariant
ON dbo.Nop_ProductVariant.ProductVariantId =
dbo.Nop_OrderProductVariant.ProductVariantID
INNER JOIN dbo.Nop_Product
ON dbo.Nop_ProductVariant.ProductID = dbo.Nop_Product.ProductId
INNER JOIN dbo.Nop_Product_Manufacturer_Mapping
INNER JOIN dbo.Nop_Manufacturer
ON dbo.Nop_Product_Manufacturer_Mapping.ManufacturerID =
dbo.Nop_Manufacturer.ManufacturerID
ON dbo.Nop_Product.ProductId =
dbo.Nop_Product_Manufacturer_Mapping.ProductID
INNER JOIN dbo.Nop_Order
ON dbo.Nop_OrderProductVariant.OrderID = dbo.Nop_Order.OrderID
WHERE ( NOT ( dbo.Nop_Order.PaidDate IS NULL ) )
GROUP BY dbo.Nop_Manufacturer.Name,
MONTH(dbo.Nop_Order.PaidDate),
YEAR(dbo.Nop_Order.PaidDate)
答案 0 :(得分:3)
CAST
- 以INT
为单位不会影响计算列的可感知空性。您需要将它们包装在ISNULL
中。
e.g。 ISNULL(YEAR(dbo.Nop_Order.PaidDate),0)
数据库引擎自动确定可空性 根据使用的表达式计算列。结果最多 即使只有不可为空的列,表达式也被认为是可空的 存在,因为可能会产生下溢或溢出 null结果也是如此。使用
COLUMNPROPERTY
功能AllowsNull
属性调查任何计算的可空性 表中的列。可以为空的表达式可以转换为 通过指定ISNULL(check_expression, constant)
,不可为空的, 其中常量是替换任何空结果的非空值。