2013-09-26 7 views
3

Я добавляю вычисленный столбец из трех полей. Это будет поле VARCHAR. Мне нужно указать максимальную длину для вычисленного столбца. Как мы можем это указать.Как указать максимальную длину для вычисленного столбца

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

Есть ли способ ограничить это? Мне нужно, чтобы вызвать ошибку, если она более 10 символов длиной

Ссылка: Specify Computed Columns in a Table

+3

Максимальная длина будет рассчитываться автоматически из компонентов. Почему вы хотите явно указать максимальную длину и что должно произойти, если длина превышает это? –

+0

@MartinSmith Есть ли способ ограничить это? Мне нужно сделать ошибку, если она длиннее 10 символов. – Lijo

ответ

4

В одну сторону

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) 
) 
0

Предполагая, скажем, максимальная длина составляет 100, то:

ALTER TABLE [MyTable] ADD CustomNumber 
    AS Ltrim(Substring([PGM]+'-'+[GRP]+'-'+[PGMGRPSEQ] + Space(100), 1, 100)) 
+3

Это не делает то, что задано. –

+1

Хорошая точка, @MartinSmith. Извините, я пропустил часть, поднимающую ошибку. – asantaballa

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) 
+0

«Вычисленный столбец« CustomNumber »в таблице« MyTable »недопустим для использования в« CHECK CONSTRAINT », потому что он не сохраняется». –

+0

@martin - О, да, ты совершенно пропустил это. – AnandPhadke

Смежные вопросы