SQL 中计算的、不可空的、非持久化的 nvarchar

问题描述 投票:0回答:1

考虑以下模式:

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
)导致了这种情况。有没有一种优雅的方法来解决这个问题,而又不会使公式过于复杂而难以阅读?

如果有人想知道,我正在为最终用户编写一个小型表达式评估器,因此希望语法简洁。

更新:我什至尝试在公式末尾添加

 + ' '
,但它仍然显示为空。

SSMS Table Designer

sql sql-server null nvarchar
1个回答
0
投票

处理公式中 NULL 的可能性是否有帮助 isnull(x,' ') 另外 CONCAT_WS 可能有助于整理

© www.soinside.com 2019 - 2024. All rights reserved.