将视图中的计算列定义为非空

发布于 2024-12-06 13:06:50 字数 1509 浏览 0 评论 0 原文

我有一个包含计算列的视图,现在我需要强制计算列为“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)  

I have a view with computed columns now I need to enforce the computed columns to be "not null" for lightswitch.

I tried to cast() but I still cant get the computed columns to be "not null"
Is it possible?

This is my 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)  

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

糖粟与秋泊 2024-12-13 13:06:50

CAST-ing as INT 不会对计算列的可空性产生任何影响。您需要将它们包装在 ISNULL 中。

例如 ISNULL(YEAR(dbo.Nop_Order.PaidDate),0)

这记录在 最后一段

数据库引擎自动确定以下内容的可为空性
基于所使用的表达式的计算列。大多数的结果
即使只有不可为空的列,表达式也被视为可为空
存在,因为可能的下溢或溢出会产生
结果也为空。将 COLUMNPROPERTY 函数与
AllowsNull 属性来调查任何计算的可为空性
表中的列。可为空的表达式可以转换为
通过指定 ISNULL(check_expression,constant) 来不可为 null,
其中常量是替换任何空结果的非空值。

CAST-ing as INT won't do anything to affect the perceived nullability of computed columns. You need to wrap them in ISNULL instead.

e.g. ISNULL(YEAR(dbo.Nop_Order.PaidDate),0)

This is documented in the last paragraph here

The Database Engine automatically determines the nullability of
computed columns based on the expressions used. The result of most
expressions is considered nullable even if only nonnullable columns
are present, because possible underflows or overflows will produce
null results as well. Use the COLUMNPROPERTY function with the
AllowsNull property to investigate the nullability of any computed
column in a table. An expression that is nullable can be turned into a
nonnullable one by specifying ISNULL(check_expression, constant),
where the constant is a nonnull value substituted for any null result.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文