【问题标题】:Insert mutiple unique rows into a table将多个唯一行插入表中
【发布时间】:2014-07-25 02:42:09
【问题描述】:

我对 SQL 不太熟悉。我正在尝试将多行数据插入到表中,如果在 BusinessFilterPhrase 列中存在具有重复值的行,则不要插入。我写了一个我认为应该是的伪代码。

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();
   }
}

【问题讨论】:

    标签: asp.net sql sql-server-2008


    【解决方案1】:

    您的代码看起来正确。我会写成:

    insert into tblBusinessName(BusinessFilterPhrase, BusinessCategoryID)
        select @BusinessFilterPhrase, @BusinessCategoryID
        from tblBusinessName t1
        where NOT EXISTS (select 1
                          from tblBusinessName d1
                          where d1.BusinessFilterPhrase = @BusinessFilterPhrase
                         )
    

    (这些变化只是装饰性的。)

    编辑:

    如果性能有问题,请在BusinessFilterPhrase 上创建索引:

    create index idx_tblBusinessName_BusinessFilterPhrase on tblBusinessName(BusinessFilterPhrase);
    

    如果您希望数据库强制列的唯一性(插入重复值时会产生错误),您可以将其设为unique 索引。

    【讨论】:

    • 当查询增加到 > 500 插入时,是否有另一种方法可以更好地扩展?例子?加入?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    相关资源
    最近更新 更多