Sql-Server

是否可以允許期望列被讀/寫的遺留程式碼的直寫計算列?

  • January 24, 2012

我有這個用於 IP 儲存的現有表:

CREATE TABLE [dbo].[IPAddresses](
   [ID] [int] IDENTITY(1,1) NOT NULL,
   [IPv4Address] [varchar](15) NULL,
   [IPv6Address] [varchar](45) NULL,
CONSTRAINT [PK_IPAddresses] PRIMARY KEY CLUSTERED 
(
   [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
CONSTRAINT [UniqueIPv4Address] UNIQUE NONCLUSTERED 
(
   [IPv4Address] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

我想將此表轉換為使用一個整數(或幾個整數)來儲存此 IP 資訊。我想根據我的新列來製作IPv4Address和計算列以進行儲存。IPv6Address

我面臨的問題是我有一些遺留客戶訪問這個數據庫,他們需要直接將“192.168.1.54”寫入我的IPv4Address專欄。我希望數據庫能夠接受這一點,將其轉換為整數,並將其儲存在定義為int.

是否有可能

  • 編寫現有表的轉換腳本,將所有“字元串”IP 轉換為其整數值並將其儲存在 int 列中,併計算這些“字元串”列
  • 允許遺留客戶端“寫入”這些計算列並截取該數據,將其轉換為 int,並將其透明地儲存給遺留客戶端?

我相當確定我可以編寫一個腳本來轉換數據,但如果我不能讓我的數據庫的舊客戶端透明,我不想浪費我的時間。所以任何指導都會有很長的路要走。

您可以使用INSTEAD OF INSERT 觸發器

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