Sql-Server-2016

將欄位添加到表中(但在另一個數據庫中)

  • March 24, 2020

我知道這是一個奇怪的問題,但我會盡力解釋它。

我們的 MSSQL Server 2016 上有一個數據庫(我稱之為 MachineDB),它每天從一台機器上獲取許多數據集(我們說的是每天大約 50k 個數據集,這個數據庫已經執行了 2 年)。數據集由特定於該機器的一些欄位組成。每當機器製造商有更新時,這將是一個 DacPack。我知道這基本上是一個架構更新,它將刪除一些表/欄位並添加其他表/欄位。我知道有一些方法可以手動比較這些模式並手動更新它們。

所以,我想做的是將一個 int 類型的欄位添加到其中一個表中(該表定義了一個主鍵)。我們想使用此欄位來跟踪庫存使用情況。只需添加此欄位並用所需數據填充它會很容易。

但是,無論何時推出更新,該欄位都會被刪除,因為更新過程會進行某種模式比較並刪除不再使用的欄位。

所以實際的問題是:有沒有一種方法可以將該欄位添加到另一個引用主數據庫的數據庫中,或者正確的方法是什麼?

您可能只需將新模式添加到現有數據庫即可逃脫,但無論哪種方式,解決方案都大致相同。

為了避免干擾 dacpac 部署,您可能希望避免實際實施真正的外鍵約束。您可以讓儲存過程執行插入/更新,並讓它在插入新行之前手動執行約束檢查。

但基本上,創建一個具有非遞增主鍵的表(應該與源表 1:1。然後將您的自定義欄位添加到該表中。您可以使用視圖將它們合併在一起以便更容易消化如果你想要的內容。

CREATE TABLE dbo.Extension
   (
   DatasetID INT NOT NULL PRIMARY KEY --make sure to match type to source
   , InventoryCount INT NULL 
   )

正如我所說,如果您可以將其添加為自定義模式(假設在供應商使用的 dacpac 更新過程中仍然存在),那麼它可以存在於同一個數據庫中(我的偏好)。但是,如果您願意,也可以將其添加到新數據庫中。

引用自:https://dba.stackexchange.com/questions/262571