防止SQL中的重复条目

时间:2012-02-10 14:32:25

标签: vb.net sql-server-2008 duplicates

如何使用SQL Query阻止文本字段中的重复条目?

3 个答案:

答案 0 :(得分:2)

SQL Server中用于防止重复条目的功能称为UNIQUE INDEX

但是,列的最大大小必须至多为900字节:

  

[...]组合索引值的最大允许大小为900字节。

     

大对象(LOB)数据类型ntext,text,varchar(max),nvarchar(max),varbinary(max),xml或image的列不能指定为索引的键列。

如果您的文本大于此值,则无法使用唯一索引,您可能需要考虑限制重复值是否真的是您遇到的任何问题的正确解决方案。如果您认为您需要一个文本的唯一索引可能会长达数千个字节,那么您可能会解决错误的问题。

但是,您也可以考虑以加密方式对内容进行哈希处理(例如MD5,SHA1等...)并为哈希添加唯一索引。虽然哈希在理论上可以为不同的文本提供冲突,但这在实践中不太可能发生,除非您的数据来自不受信任的来源(例如用户数据)。在这种情况下,您需要考虑哈希冲突的安全隐患,并确保选择足够强大的加密哈希函数。

答案 1 :(得分:2)

如果要阻止插入重复行,可以添加唯一索引:

CREATE UNIQUE INDEX ix_IndexName ON MyTable(MyUniqueField) WITH IGNORE_DUP_KEY = <ON/OFF>

如果将IGNORE选项设置为ON,则只会忽略重复的行。如果它设置为OFF,则重复项将生成错误并停止插入。

答案 2 :(得分:0)

您可以使用DISTINCT。请参阅this链接

像这样:

SELECT DISTINCT
    YourTable.textField
FROM
    YourTable