我在SQL中有一个varbinary列,我希望这个列始终是唯一的。但是,我发现SQL不允许在varbinary列上创建唯一约束。 有没有解决方法来确保这种独特性?也许通过使用其他类型的约束,或其他什么?
谢谢!
答案 0 :(得分:0)
我猜你有VARBINARY(MAX)
。它的长度为2^31-1
个字节,但密钥的最大长度应为900个字节。所以你实际上受限于VARBINARY(900)
。如果大小为VARBINARY <= 900
,则可以添加唯一索引。
作为一种变通方法,如果表中已有相同的值,则可以添加Trigger
和回滚插入。
答案 1 :(得分:0)
如果varbinary相当短,那么您可以创建十六进制表示的计算列并对其进行唯一约束。参考SQL Server converting varbinary to string,了解如何将varbinary转换为十六进制字符串。
Edit1 :正如@GiorgiNakeuri所指出的,唯一约束的限制是900字节,所以十六进制为450字节。
Edit2 :或者,如果您可以减少(非常)小的失败风险,那么您可以创建一个带有varbinary值的MD5哈希值的计算列,并对其进行唯一约束。请参阅HASHBYTES的文档。
答案 2 :(得分:-1)
您可以将列设为主键。脚本测试表如下所示
/****** 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