Eu tenho uma tabela com uma coluna FILESTREAM e ela possui duas restrições exclusivas especificadas para a mesma coluna FILESTREAM, ou seja:
ALTER TABLE [dbo].[TableName]
ADD CONSTRAINT [UQ__TableName__33C4988760FC61CA]
UNIQUE NONCLUSTERED ([GUID_Column]);
GO
ALTER TABLE [dbo].[TableName]
ADD CONSTRAINT [UQ__TableName__33C49887145C0A3F]
UNIQUE NONCLUSTERED ([GUID_Column]);
GO
Gostaria de descartar uma das restrições exclusivas, pois são duplicatas. No entanto, quando tento descartar uma das duas restrições duplicadas, recebo o seguinte erro.
Uma tabela com coluna(s) FILESTREAM deve ter uma coluna ROWGUID exclusiva não NULL.
Alguém sabe como remover uma das duas restrições?
Consegui recriar esse problema.
O melhor que posso dizer é que isso é um bug e (1) o SQL Server tem uma regra rígida relacionada a tabelas com colunas FILESTREAM que diz "se eles tentarem descartar QUALQUER restrição UNIQUE na coluna ROWGUIDCOL em uma tabela com FILESTREAM, não os deixe " e/ou (2) Sempre existe uma restrição UNIQUE em uma coluna e criar outra é como criar um alias. Então, quando você tenta descartar um, na verdade está descartando os dois.
Sobre como resolver. Infelizmente, você não pode adicionar uma segunda coluna do tipo ROWGUIDCOL a uma tabela, o que evita uma correção interna à tabela existente. Você provavelmente terá que criar uma nova tabela com o mesmo esquema (menos a restrição exclusiva extra), copiar os dados da tabela atual para a nova tabela, descartar a tabela antiga e renomear a nova de volta para o nome antigo .
Com base na situação da resposta de @TetonSig, é assim que você pode acabar com apenas uma restrição exclusiva na tabela.
Adicione o tratamento de erros ou execute os comandos individualmente e verifique se há erros para não eliminar a tabela se ocorrer um erro nas etapas anteriores.
BTW: Este problema deve ser corrigido no SQL Server 2012