2016-11-04 46 views
3

我正在查看在我們的數據庫中創建時態表https://msdn.microsoft.com/en-us/library/mt604462.aspx,但我無法查看有幾個計算列的表。Azure SQL Server 2016時態表中的計算列

返回的錯誤消息是相當自我解釋性的

「計算列定義與這是不允許的與系統版本化表用戶定義函數」

但我希望有是排除或忽略列被跟蹤的一種方法?

我已經嘗試刪除創建歷史表的計算列,然後將計算列添加回表中,但這不起作用。

任何幫助表示讚賞。

感謝

編輯 -
我沒能找到一種方法,從被跟蹤忽略列,但我們能夠重構,但是所採用的UDF從而使我們能夠使用的時態表中的列。

+0

當您堅持列時它工作嗎? – dfundako

+0

@dfundako對不起,你是什麼意思堅持專欄?謝謝Jay – Macilquham

+0

我想知道UDF是否是問題所在。計算列是否使用UDF工作? –

回答

0

系統版本化的表架構修改失敗,因爲在系統版本化爲ON時添加計算列而不支持,所以出於同樣的原因,如果有計算列,則無法將常規錶轉換爲臨時表。

希望能幫助,

+0

「如果有計算列,則不能將常規錶轉換爲臨時表」 - 您可以。我剛剛做完。但是,當您創建或更改該列時,必須關閉系統版本控制,然後再次打開系統版本控制。 – DaveBoltman

3

我是用添加計算列到現有的系統版本表中掙扎。如果有其他人遇到類似問題,我最終意識到歷史表不會以相同的方式處理列。它最終類似於在基表上有一個IDENTITY列,但這會導致歷史記錄表上的常規INT字段。

如果您正試圖計算列添加到系統版本(時間)表:

  • 首先關閉系統版本
  • 那麼你的計算列添加到基表
  • 驗證結果計算列的「類型」
  • 將具有相應靜態類型的列添加到歷史記錄表中
  • 重新打開系統版本控制(不要忘記指定歷史記錄Y TABLE)

我覺得很奇怪,您可能在重新開啓系統版本時意外忽略了history_table。我希望它會恢復版本到同一張表或拋出某種錯誤,因爲它可能有點意外的行爲。

@ pasquale-ceglie - 我沒有足夠的聲望發表評論,但我想展開你的評論。你應該能夠使用大多數計算列與時態表,只是更手動。基本上,您不能將模式定義與計算列複製,但是您可以在嘗試打開所有內容之前複製結果列並生成適當的歷史記錄表。這兩個表格之間的定義有點不同(起初我很困惑)。我在這裏訂閱,如果上面不清楚,並且很好奇,我就可以ping通。