如何使视图列不为NULL

我正在尝试创建一个视图,其中我希望列仅为true或false。然而,似乎无论我做什么,SQLServer(2008)都认为我的bit列可能是空的

我有一个名为“Product”的表,其中“Status”列为INT,NULL。在视图中,我希望为Product中的每一行返回一行,如果Product.Status列等于3,则位列设置为true,否则位字段应为false

示例SQL

选择强制转换(大小写为空(状态为0)
3时1
其他0
像哈斯塔斯一样结束
来自dbo.Product

如果我将此查询保存为视图并查看对象资源管理器中的列,则列HasStatus设置为BIT,NULL。但它永远不应该为空。是否有一些神奇的SQL技巧可以用来强制此列为非NULL

请注意,如果我删除案例周围的CAST(),则列将正确设置为notnull,但列的类型将设置为INT,这不是我想要的。我希望它是:-)

您可以通过稍微重新安排查询来实现您想要的。诀窍是,ISNULL必须在外部,SQL Server才能理解结果值永远不能是NULL

选择ISNULL(强制转换)(
病例状态
3时1
其他0
结束为位),0)为HasStatus
来自dbo.Product

我发现这很有用的一个原因是当使用ORM时,您不希望结果值映射到可为null的类型。如果您的应用程序认为值永远不可能为空,那么它可以使事情变得更容易。然后,您不必编写代码来处理空异常等

发表评论