我在SQL中有一个varbinary列,我希望这个列始终是唯一的。然而,我发现SQL不允许在varbinary列上创建唯一约束。
有没有什么解决办法来确保这种唯一性?也许通过使用其他类型的约束或其他方式?
谢谢!
我在SQL中有一个varbinary列,我希望这个列始终是唯一的。然而,我发现SQL不允许在varbinary列上创建唯一约束。
有没有什么解决办法来确保这种唯一性?也许通过使用其他类型的约束或其他方式?
谢谢!
VARBINARY(MAX)
。它的长度为 2^31-1
字节,但是键的最大长度应该是 900 字节。所以你实际上只能使用 VARBINARY(900)
。如果 VARBINARY
的大小小于或等于 900,则可以添加唯一索引。Trigger
并回滚插入操作,如果表中已经存在相同的值。/****** Object: Table [dbo].[Table_1] Script Date: 02/03/2015 12:19:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Table_1](
[test] [varbinary](50) NOT NULL,
[rf] [nchar](10) NULL,
CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED
(
[test] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
一种更简单的解决方案是通过在插入或更新列之前检查要插入或更新的值是否存在来手动维护该列的唯一性。
例如:
DECLARE @Exists BIT = (
SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END
FROM [Schema].[Table]
WHERE [DecryptedColumn] = @NewValueToCheck
)
IF (@Exists = 0)
BEGIN
-- Insert or Update
END
ELSE
-- Return Error
BEGIN
END