(sem descartar chaves estrangeiras)
Migrei um banco de dados SQL Server CE para SQL Server 2012, no entanto, a integridade referencial foi imposta por meio de restrições de chave exclusivas nas INT
colunas de identidade substitutas.
por exemplo
create table Table1
(
Table1ID INT NOT NULL,
CONSTRAINT U_000001 UNIQUE(Table1ID)
);
CREATE TABLE Table2
(
Table2ID INT NOT NULL,
Table1ID INT NOT NULL,
CONSTRAINT FK_T2_T1 FOREIGN KEY(Table1ID) REFERENCES Table1(Table1ID)
);
Gostaria de converter as restrições de chave exclusivas em chaves primárias, por motivos de diagramação ERD e ORM.
Eu adicionei as chaves primárias, mas não posso descartar o UKC, porque o RI de colunas dependentes já está "integrado" no UKC, apesar do PK alternativo agora estar disponível.
ALTER TABLE Table1 ADD CONSTRAINT PK_Table1 PRIMARY KEY (Table1ID);
ALTER TABLE Table1 DROP CONSTRAINT U_000001;
falha com
Msg 3725, Nível 16, Estado 0, Linha 1
A restrição 'U_000001' está sendo referenciada pela tabela 'Table2', restrição de chave estrangeira 'FK_T2_T1'.
Portanto, minha pergunta é: existe alguma maneira de alterar as verificações de RI nas chaves estrangeiras para usar o PRIMARY KEY
, e não o UKC, como é o caso atualmente, sem ter que descartar as chaves estrangeiras nas tabelas de referência primeiro?
Eu preparei um pequeno SQL Fiddle aqui .
Atualmente, não há como modificar a qual índice exclusivo uma restrição de chave estrangeira está "anexada", porque isso deve ser um detalhe de implementação interna, da mesma forma que uma restrição exclusiva usa um índice exclusivo nos bastidores para impor a restrição.
Na verdade, como você viu, se você tiver vários índices candidatos, aquele ao qual a chave estrangeira se anexa parece não determinístico (pode ir por id de índice, largura do índice ou qualquer outra coisa; eu não brinquei com isso em profundidade ) e também não pode ser especificado na instrução DDL (a memória diz que há um item Connect solicitando esse recurso, no entanto).
Portanto, neste caso, pelo menos por enquanto, você precisará descartar a chave estrangeira e a restrição exclusiva existente antes de restabelecer o relacionamento, para garantir que seu script de alteração funcione corretamente em todos os cenários.