我有一个带有 FILESTREAM 列的表,它为同一 FILESTREAM 列指定了两个唯一约束,即:
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
我想删除其中一个独特的约束,因为它们是重复的。但是,当我尝试删除两个重复约束之一时,我收到以下错误。
具有 FILESTREAM 列的表必须具有非 NULL 唯一 ROWGUID 列。
任何人都知道如何删除这两个约束之一?
我能够重现这个问题。
最好我能说这是一个错误,并且(1)SQL Server 有一个与具有 FILESTREAM 列的表相关的硬性规则,上面写着“如果他们尝试在具有 FILESTREAM 的表中删除 ROWGUIDCOL 列上的任何唯一约束,不要让他们" 和/或 (2) 列上只有一个 UNIQUE 约束,而制作另一个约束就像制作别名一样。因此,当您尝试丢掉一个时,您实际上是同时丢掉了两个。
至于怎么解决。不幸的是,您不能将第二个 ROWGUIDCOL 类型的列添加到表中,这样会阻止现有表内部的修复。您可能必须创建一个具有相同架构的新表(减去额外的唯一约束),将数据从当前表复制到新表,然后删除旧表并将新表重命名为旧名称.
根据@TetonSig 的回答中的情况,这就是你如何在表上只得到一个唯一约束。
添加错误处理或单独运行命令并检查错误,这样如果在前面的步骤中发生错误,您最终不会删除表。
顺便说一句:此问题应在 SQL Server 2012 中修复