在SQL Server Management Studio中将持久计算列标记为NOT NULL

Dav*_*vid 16 sql-server ssms sql-server-2005

在SQL Server 2005中可以创建一个既持久又被定义为NOT NULL的计算列(不能包含空值).第二个属性在使用像Linq2Sql这样的库时很重要,如果我们想避免大量的手工工作来确保我们的代码列'always'有一个值.

使用直接SQL,这非常简单:
ALTER TABLE Sales ADD Total AS (Price + Taxes) PERSISTED NOT NULL

在SQL Server Management Studio的设计窗口中查看时,此列正确显示为计算列,没有"允许空值"的复选标记.但是,我遇到了在设计器中创建新列以匹配此模式的问题:在计算列规范 - >(公式)属性中输入公式,并通过将Is Persisted设置为Yes,但尝试取消选中来指定持久属性新计算列上的'允许空值'会产生一个对话框,指出"属性无法修改".

我需要涵盖广泛的技能水平,为此我需要提供添加列的程序,即使是新手也可以遵循(这意味着Management Studio设计器窗口).在SQL Server Management Studio中是否有一些秘密用于在设计器中创建一个新的计算列为NOT NULL,类似于如何使用CTRL + 0将空值插入到单元格中?

Sco*_*hic 18

你可以作弊ISNULL(Price + Taxes, 0),使用默认值0进行NULL计算.


Red*_*ter 11

正如Scoregraphic所说,你可以这样做ISNULL.

我经常将它用于计算标志,例如,在User表格中,我DeletedDate知道帐户何时被删除.然后我创建一个名为IsDeleted(类型位)的计算非可空布尔列,如下所示:

isnull(case when DeletedDate is null then 0 else 1 end, 0)
Run Code Online (Sandbox Code Playgroud)

需要注意的重要一点是,ISNULL必须位于表达式的最外层部分,以便设计人员意识到它是一个不可为空的计算列.