考虑以下模式:
CREATE TABLE [dbo].[User]
(
[Id] BIGINT NOT NULL IDENTITY (1, 1),
[NameGiven] NVARCHAR (256) NOT NULL,
[NameMiddle] NVARCHAR (256) NOT NULL CONSTRAINT [DEFAULT_User_NameMiddle] DEFAULT (''),
[NameFamily] NVARCHAR (256) NOT NULL,
[Email] NVARCHAR (256) NOT NULL,
[NameTest] AS ' ', -- Shows as NON NULL.
[NameFull] AS COALESCE(REPLACE(CONCAT(TRIM([NameGiven]), ' ', TRIM([NameMiddle]), ' ', TRIM([NameFamily])),' ',' '), ''),
[NameFullOutlook] AS COALESCE(REPLACE(CONCAT(TRIM([NameGiven]), ' ', TRIM([NameMiddle]), ' ', TRIM([NameFamily]), ' ', '(', [Email],')'), ' ', ' '), ''),
CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED ([Id] ASC)
);
该语句是合法的并创建了所需的表,但在三个计算列中,当我查询架构或在 SSMS 设计器中查看它时,只有
[NameTest]
显示为 NOT NULL
。
请注意,计算字段仅指其他列
NVARCHAR
和 NOT NULL
。我希望 [NameFull]
和 [NameFullOutlook]
列也显示为非空。这些列不应保留。
所以我怀疑正在使用的一个或多个函数(
COALESCE
、CONCAT
、REPLACE
、TRIM
)导致了这种情况。有没有一种优雅的方法来解决这个问题,而又不会使公式过于复杂而难以阅读?
如果有人想知道,我正在为最终用户编写一个小型表达式评估器,因此希望语法简洁。
更新:我什至尝试在公式末尾添加
+ ' '
,但它仍然显示为空。
处理公式中 NULL 的可能性是否有帮助 isnull(x,' ') 另外 CONCAT_WS 可能有助于整理