Asp.net 在表中插入多个唯一行
我对SQL不太熟悉。我试图将多行数据插入到一个表中,如果businessfilterprase列中存在具有重复值的行,则不插入。我写了一个我认为应该是的伪代码Asp.net 在表中插入多个唯一行,asp.net,sql,sql-server-2008,Asp.net,Sql,Sql Server 2008,我对SQL不太熟悉。我试图将多行数据插入到一个表中,如果businessfilterprase列中存在具有重复值的行,则不插入。我写了一个我认为应该是的伪代码 if (filterCategoryList != null) { foreach (KeyValuePair<string, int> filter in filterCategoryList) { cmd.CommandText = "insert into tblBusinessName (Bus
if (filterCategoryList != null)
{
foreach (KeyValuePair<string, int> filter in filterCategoryList)
{
cmd.CommandText = "insert into tblBusinessName (BusinessFilterPhrase,BusinessCategoryID)" +
"select @BusinessFilterPhrase,@BusinessCategoryID" +
"from tblBusinessName as t1" +
"where NOT EXISTS" +
"( select * from tblBusinessName as d1 where d1.BusinessFilterPhrase = @BusinessFilterPhrase) ";
cmd.Parameters.AddWithValue("@BusinessFilterPhrase", filter.Key);
cmd.Parameters.AddWithValue("@BusinessCategoryID", filter.Value.ToString());
cmd.ExecuteNonQuery();
}
}
您的代码看起来是正确的。我会这样写:
insert into tblBusinessName(BusinessFilterPhrase, BusinessCategoryID)
select @BusinessFilterPhrase, @BusinessCategoryID
from tblBusinessName t1
where NOT EXISTS (select 1
from tblBusinessName d1
where d1.BusinessFilterPhrase = @BusinessFilterPhrase
)
这些变化只是表面上的
编辑:
如果性能是一个问题,请在BusinessFilterPhrase上创建索引:
您可以将其设置为唯一索引,如果希望数据库强制执行列的唯一性,则在插入重复值时会生成错误。是否有其他方法可以更好地扩展查询,如插入500次?例子?加入?
create index idx_tblBusinessName_BusinessFilterPhrase on tblBusinessName(BusinessFilterPhrase);