[英]How to handle duplicates in SQL Server
我在SQL Server中有一个名为Test_Table
的表,该表有两列: ID
和Name
该表如下所示:
ID NAME
--------
1 John
2 Jane
现在,我有一个存储过程,可以在其中插入记录。
INSERT INTO Test_Table
VALUES (@Id,@Name)
我正在通过我的C#代码传递此值。 现在,我想对此进行修改,以便该表没有重复项。 在代码或数据库中应在哪里检查? 我在数据库方面非常虚弱。 因此,如何在表中插入值之前处理重复项
在任何一种情况下,您都必须访问数据库以检查值是否已存在。
IF NOT EXISTS (SELECT * FROM Test_Table WHERE ID= @ID AND Name=@Name)
BEGIN
INSERT INTO Test_Table
VALUES (@Id,@Name)
END
如果可以将ID列设置为唯一,则可以避免进行检查,因为不允许插入以重复ID值,在这种情况下,您将不得不处理错误。
请参阅此线程如何处理违反唯一键约束的情况。
如果您不想重复ID,则必须将ID设置为主键,这几乎是必须的。
如果您不希望重复该名称,则可以使用表包含的名称填充列表,然后只插入该列表中未包含的任何名称。
这是一个示例,而不是使用列表,而是使用字典:
Dictionary<int, string> Names = new Dictionary<int, string> ();
using (SqlCommand command = new SqlCommand ("SELECT * FROM TestTable", con))
using (SqlDataReader reader = command.ExecuteReader ()) {
while (reader.Read ()) {
Names.Add (reader["ID"], reader["NAME"]);
}
}
if (!Names.ContainsValue ("ValueYouWantToInsert")) {
//do stuff
}
您应该在数据库中执行此检查。 始终,如果您希望它是真实的数据。
我不确定您认为该重复什么。 通常, id
列将是为每个值自动递增的标识列。 这样可以防止重复。 您将其定义为:
create table test_table (
id int not null identity(1, 1),
. . .
然后,您可以使用以下命令将其插入:
insert into test_table(name)
values (@Name);
该id
将自动分配。
如果您不希望只为name
重复,则创建一个唯一索引或唯一约束(实际上是一样的)。 您可以在表定义中执行此操作,只需向列添加unique
:
create table test_table (
id int not null identity(1, 1),
name varchar(255) unique
. . .
或在创建表后通过创建唯一索引:
create index test_table_name on test_table(name)
(或者通过显式创建约束,这是另一种方法。)
您应该在数据库中检查它,也可以将ID作为主键
这是最常用的,因为人们可以有重复的名字。
您可以使用“ 唯一”键约束来修改ID,也可以将其设置为主键 。
尝试这样:
alter table Test_Table add primary key (ID)
和
alter table Test_Table add unique key (Name)
IF NOT EXISTS (SELECT * FROM Test_Table WHERE ID= @ID AND Name=@Name)
BEGIN
INSERT INTO Test_Table
VALUES (@Id,@Name)
END
ELSE
BEGIN
UPDATE Test_Table
SET ID= @ID,NAME = @Name
WHERE ID= @ID AND Name=@Name
END
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.