Estou explorando o procedimento sp_rename no MSSQL com base na entrada fornecida em uma resposta a outra pergunta.
Tenho cerca de 50 tabelas que foram criadas com uma coluna UID tendo um nome de restrição exclusivo aleatório como "UQ__tblAssig__C5B19603C906D5BE". Quero renomear essas restrições para exatamente I_UID para todas as tabelas para cumprir com outros índices usados nas diferentes tabelas. Observe que o índice [I_UID] não está presente em nenhuma das tabelas de antemão. Executar a primeira dessas três linhas funciona bem, e obtenho um índice I_UID na pasta de índice de tblAssignmentType.
EXEC sp_rename N'[tblAssignmentType].[UQ__tblAssig__C5B19603C906D5BE]', N'[I_UID]', N'INDEX';
EXEC sp_rename N'[tblProduct].[UQ__tblProdu__C5B196034878474D]', N'[I_UID]', N'INDEX';
EXEC sp_rename N'[tblAssignment].[UQ__tblAssig__C5B196031B17A97B]', N'[I_UID]', N'INDEX';
Entretanto, quando executo uma das próximas linhas, recebo a seguinte mensagem de erro:
Msg 15335, Level 11, State 1, Procedure sp_rename, Line 733 [Batch Start Line 38]
Error: The new name '[I_UID]' is already in use as a INDEX name and
would cause a duplicate that is not permitted.
Mas em tblProduct eu não tenho um índice chamado I_UID. Portanto, suspeito que a declaração de renomeação anterior fez um índice I_UID no escopo global, mesmo que ele apareça na tabela correta.
O que me leva à pergunta: que tipo de sintaxe eu poderia usar com sp_rename para especificar que o novo nome deveria estar contido dentro do escopo de uma determinada tabela de tal forma que o mesmo nome local também pudesse ser usado para outras tabelas posteriormente?