5

我正在从三个字段中添加一个计算列。这将是一个 VARCHAR 字段。我需要指定计算列的最大长度。我们如何指定。

ALTER TABLE [MyTable] ADD  CustomNumber AS [PGM]+'-'+[GRP]+'-'+[PGMGRPSEQ]

有什么办法可以限制它吗?如果长度超过 10 个字符,我需要引发错误

参考:指定表中的计算列

4

3 回答 3

5

单程

CREATE TABLE [MyTable]
(
[PGM] VARCHAR(50),
[GRP] VARCHAR(50),
[PGMGRPSEQ] VARCHAR(50),
CustomNumber AS [PGM]+'-'+[GRP]+'-'+[PGMGRPSEQ] PERSISTED CHECK (LEN(CustomNumber) <= 10)
)

或者,如果您不想保留计算列,只需添加一个重复表达式的检查约束。

CREATE TABLE [MyTable]
(
[PGM] VARCHAR(50),
[GRP] VARCHAR(50),
[PGMGRPSEQ] VARCHAR(50),
CustomNumber AS [PGM]+'-'+[GRP]+'-'+[PGMGRPSEQ],
CHECK (LEN([PGM]+'-'+[GRP]+'-'+[PGMGRPSEQ] ) <= 10)
)
于 2013-09-26T12:43:49.883 回答
0

假设最大长度为 100,则:

ALTER TABLE [MyTable] ADD  CustomNumber 
    AS Ltrim(Substring([PGM]+'-'+[GRP]+'-'+[PGMGRPSEQ]  + Space(100), 1, 100))
于 2013-09-26T12:34:39.143 回答
0

尝试这个:

CREATE TABLE [MyTable]
(
[PGM] VARCHAR(50),
[GRP] VARCHAR(50),
[PGMGRPSEQ] VARCHAR(50)
)

ALTER TABLE [MyTable] ADD  CustomNumber AS [PGM]+'-'+[GRP]+'-'+[PGMGRPSEQ] PERSISTED
GO
ALTER TABLE [MyTable]
ADD CONSTRAINT [MaxLenLimit] CHECK (LEN([CustomNumber]) <= 100)
于 2013-09-26T12:43:43.780 回答