Eu tenho esta tabela existente para armazenamento 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]
Eu quero converter esta tabela para usar um número inteiro (ou vários números inteiros) para armazenar essas informações de IP. Eu gostaria de criar IPv4Address
e IPv6Address
computar colunas com base em minhas novas colunas para armazenamento.
O problema que estou enfrentando é que tenho alguns clientes legados acessando esse banco de dados, que precisam escrever diretamente '192.168.1.54' em minha IPv4Address
coluna. Gostaria que o banco de dados interceptasse isso, fizesse uma conversão para inteiro e armazenasse em uma nova coluna na tabela definida como int
.
é possível
- Script uma conversão da minha tabela existente, convertendo todos os meus IPs "string" em seus valores inteiros e armazenando-os em uma coluna int, e tornando essas colunas "string" computadas
- Permitir que clientes legados "escrevam" nessas colunas computadas e interceptem esses dados, convertam-nos em um int e armazenem-nos de forma transparente para clientes legados?
Tenho quase certeza de que posso escrever um script para converter os dados, mas não quero perder meu tempo se não puder tornar isso transparente para os clientes legados do meu banco de dados. Portanto, qualquer orientação irá percorrer um longo caminho.
Você pode usar gatilhos INSTEAD OF INSERT .