2015-05-19 98 views
3

我有大約10個包含數據的表。我需要更改數據類型爲bigintnumeric(18,0)的字段。在sql server中將列類型從bigint更改爲數字(18,0)

我們已經驗證了我們數據庫中的數據,不會有任何數據丟失。在我們的更低的環境中,我們所做的是:

  1. 接過備份現有的表,其更名爲暫時
  2. 與數字數據類型
  3. 填充從備份表數據
  4. 如果一切創建新表好吧,然後刪除備份表

以上是我們在下的環境中所遵循的過程。

但是,當涉及到產品時,我們無法遵循上述過程。我們想要改變使用ALTER語句。由於它是PROD環境,我們必須小心變化。正如我剛纔所說,不會有任何數據丟失。

但仍然想知道 - 當我們執行ALTER聲明時內部發生了什麼?

它是否會刪除表並使用新定義重新創建並重新填充數據?如果是這樣,是否有與此相關的風險?

有關如何在PROD中妥善處理這些問題的任何想法,將不勝感激。

+0

但爲什麼要從bigint到數字(18,0)?我會做相反的... – jarlh

+0

我正在將此與MS Access鏈接表進行映射。 Bigint將轉換爲Access中的文本而不是數字,其中SQL服務器中的數字將被正確映射爲數字 –

+0

謝謝您解釋! – jarlh

回答

1

我可能會建議一種不重建數據的方法。改用計算列。像這樣:

sp_rename 'table.dbo.col', '_col', 'COLUMN'; 

alter table table add col as (cast(_col as numeric(18, 0)); 

然後,您可以訪問col作爲你想要的類型。您不必重寫任何數據,因此不會有任何鎖定或其他性能問題。當然,select *會有點多餘,但你可能不應該這樣做。

+0

我會盡可能爲增加的計算列,而不是重命名的列,否則你會影響所有現有的讀取,插入和更新 –

相關問題