簡體   English   中英

將數據庫中所有表列的varchar更改為nvarchar

[英]Changing varchar to nvarchar for all table columns in a database

有沒有一種方法可以完全遍歷數據庫中的所有表並將所有varchar數據類型更改為nvarchar數據類型?

由於索引,唯一鍵和其他條件的限制,下面的簡單SQL無法按預期工作。

ALTER TABLE [CUS].[Customers] 
    ALTER COLUMN [CustomerNo] NVARCHAR(500);

我嘗試通過GUI方式從SSMS更改它們,而探查器實際上顯示了如何真正更改數據類型。

  • 步驟1:創建一個臨時表,將nvarchar列從varchar更改為
  • 步驟2:設置一些鎖定升級(不知道這是什么)
  • 步驟3:將所有數據從原始表插入到臨時表
  • 步驟4:刪除原始表格
  • 步驟5:將臨時表重命名為原始表的名稱
  • 步驟6:添加約束
  • 步驟7:添加索引

這涉及很多步驟,而且如果我手動進行,會很麻煩。

誰能為我的問題提出更靈活的解決方案?

或者,您可以:

  1. 腳本化整個數據庫而沒有數據
  2. 將列定義從VARCHAR更改為NVARCHAR
  3. 使用SSIS或SQL傳輸數據

優點:

  • 它對源數據庫的影響可能較小
  • 如果可以在單獨的服務器上運行它,則可以將影響最小化

缺點:

  • 您將必須傳輸所有數據,這需要時間
  • 您必須確保服務器上有足夠的磁盤空間來存儲數據庫數據,索引數據和日志文件

根據您選擇的傳輸方法和表的大小,即使您處於簡單恢復模式,日志文件也可能會變得很大。 當您在一個巨大的事務中傳輸大量數據時,這是最壞的情況。

附帶說明: 我同意@Igor-除非絕對必要,否則不要更改數據類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM