2013-09-26 36 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

好點,@Martin史密斯。對不起,我錯過了錯誤提高部分。 – 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

「表'MyTable'中的計算列'CustomNumber'無法在'CHECK CONSTRAINT'中使用,因爲它未被保留。」 –

+0

@馬丁 - 哦是的,你真的完全錯過了它。 – AnandPhadke