簡體   English   中英

將Nvarchar(max)轉換為nvarchar的最佳/最有效方法(30)

[英]Best/most efficient way to convert Nvarchar(max) to nvarchar (30)

我想知道是否有人可以給我指出這個問題的指針。 我假設其他人以前曾經經歷過,並且想知道什么是最有效的。

我的生產數據需要花費相當長的時間來處理,主要是因為我們尚未在ID字段上設置索引。

ID字段當前為nvarchar(max),因此無法編制索引。 該ID的長度不得超過30個字符,因此我想將數據類型更改為nvarchar(30)。 但是,我注意到使用了如下語句:

ALTER TABLE [dbo].[Table] ALTER COLUMN [Column1] NVARCHAR ( 30 ) NOT NULL

對於較小的表,已經花費了大量時間。 我擔心它甚至可能不適用於較大的表,因為DiskIO對於較小的表已經很高了。

以下內容會更快並且可以工作嗎?

  • 使用nvarchar(30)數據類型創建一個新列。
  • 然后將數據從nvarchar(max)列復制到nvarchar(30)列。
  • 然后刪除nvarchar(max)列。
  • 然后將nvarchar(30)列重命名為nvarchar(max)列的名稱?

有沒有人對更好的建議?

任何指針/幫助將不勝感激!

我們通過創建一個空的新列(NULL)並批量更新來解決類似的問題

update top (5000) myTable --parentheses are mandatory, set a small number to avoid transaction log issues
set newCol = oldCol -- or left(oldCol,30) not sure your data
where newCol is null

go 10000 --runs 10,000 times, set accordingly to your rows amount, this covers 50 million rows(5,000x10,000) 

暫無
暫無

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

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