ele*_*sk8 6 sql-server constraint
我有一个带有 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
Run Code Online (Sandbox Code Playgroud)
我想删除一个独特的约束,因为它们是重复的。但是,当我尝试删除两个重复约束之一时,我收到以下错误。
具有 FILESTREAM 列的表必须具有非 NULL 唯一 ROWGUID 列。
任何人都知道如何删除两个约束之一?
我能够重现这个问题。
CREATE DATABASE Archive
ON
PRIMARY ( NAME = Arch1,
FILENAME = 'c:\data\archdat1.mdf'),
FILEGROUP FileStreamGroup1 CONTAINS FILESTREAM( NAME = Arch3,
FILENAME = 'c:\data\filestream1')
LOG ON ( NAME = Archlog1,
FILENAME = 'c:\data\archlog1.ldf')
GO
CREATE TABLE Archive.dbo.Records
(
[Id] [uniqueidentifier] ROWGUIDCOL NOT NULL UNIQUE,
[Chart] VARBINARY(MAX) FILESTREAM NULL
)
GO
ALTER TABLE Archive.dbo.Records WITH NOCHECK
ADD CONSTRAINT testfilestream UNIQUE (ID)
GO
ALTER TABLE Archive.dbo.Records
DROP CONSTRAINT testfilestream
Run Code Online (Sandbox Code Playgroud)
我可以说这是一个错误,并且(1)SQL Server 有一个与具有 FILESTREAM 列的表相关的硬规则,该规则表示“如果他们尝试删除具有 FILESTREAM 的表中 ROWGUIDCOL 列上的任何 UNIQUE 约束,请不要让他们这样做" 和/或 (2) 列上只有一个 UNIQUE 约束,创建另一个约束就像创建别名一样。因此,当你试图丢掉其中一个时,实际上你同时丢掉了两个。
至于如何解决。遗憾的是,您无法向表中添加第二个 ROWGUIDCOL 类型列,这样就无法对现有表进行内部修复。您可能需要创建一个具有相同架构的新表(减去额外的唯一约束),将数据从当前表复制到新表,然后删除旧表并将新表重命名回旧名称。
归档时间: |
|
查看次数: |
1546 次 |
最近记录: |