我有这个现有的 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 触发器。