2010-03-08 45 views
1

我們在SQL Server中有幾個持久計算列的表。Teradata等效於持久計算列(在SQL Server中)

在Teradata中是否有與此類似的東西?而且,如果是這樣,語法是什麼,有什麼限制嗎?

我通過移除前導零尋找符合某些帳號的具體計算列 - 也就此創造了一個指標符合帳號:

ACCT_NUM_std AS ISNULL(CONVERT(varchar(39), 
           SUBSTRING(LTRIM(RTRIM([ACCT_NUM])), 
             PATINDEX('%[^0]%', 
                LTRIM(RTRIM([ACCT_NUM])) + '.' 
               ), 
             LEN(LTRIM(RTRIM([ACCT_NUM]))) 
             ) 
          ), 
         '' 
        ) PERSISTED 

隨着Teradata的TRIM功能,切邊部會稍微簡單:

ACCT_NUM_std AS COALESCE(CAST(TRIM(LEADING '0' FROM TRIM(BOTH FROM ACCT_NUM))) AS varchar(39)), 
         '' 
         ) 

我想我可能只是使這個普通列,並把代碼中所有插入到表的過程,以規範賬戶號碼。我們這樣做是爲了將標準化代碼放在一個地方。

+0

我猜你有一個原因,你爲什麼不能創建一個'計算數據'視圖和來源? – bogertron 2010-03-19 17:39:47

+0

@bogertron它真的需要被索引,因爲有些事情需要加入標準化賬號,有些則不需要。 – 2010-03-19 19:10:03

+0

這是一個很好的理由:)。是的,Teradata不支持這種機制。下一個最好的選擇,我想是創建觸發器或做你做的(重新創建邏輯)。沒有優雅 – bogertron 2010-03-19 23:24:08

回答

0

就我所能確定的,Teradata不支持表中的計算列。

不幸的是,我採用了讓所有各種插入使用相同代碼的策略,導致代碼重複。