从SQL Server表复制或克隆行

时间:2012-04-08 09:08:02

标签: asp.net sql-server linq-to-sql asp.net-mvc-2

这是修改后的代码,事情似乎工作正常,但我收到_db.SubmitChanges();上的错误

错误是

  

无法使用已在使用的密钥添加实体。

代码:

foreach (tblCourseNeededHours record in thisTable)
{
            tblCourseNeededHours newCNHR = new tblCourseNeededHours();
            newCNHR.Semester = a_semesterToOrganize;
            newCNHR.AssignToInstituteAdministrator = false;
            newCNHR.Freezed = false;

            _db.tblCourseNeededHours.InsertOnSubmit(newCNHR);
}

// submit all the changes
_db.SubmitChanges();

我正在使用MVC 2.0和SQL Server。我有一个名为tblCourses的表。

我想根据某些选择标准选择行,然后我想将这些行追加到tblCourse

我是否需要创建一个临时表tmpCourse并填写这些选定的行,然后将这些行追加回tblCourse?或者我可以在没有临时桌的情况下完成吗

任何建议,帖子链接?

1 个答案:

答案 0 :(得分:3)

我相信你可以这样做:

INSERT INTO dbo.tblCourse(list of columns)
    SELECT (list of columns)
    FROM dbo.tblCourse
    WHERE (your condition here.....)

当然,列列表必须匹配,例如您必须具有相同数量的列和相同的数据类型。此外,您不能将值插入例如IDENTITY或计算列。

更新:要在Linq-to-SQL中执行此操作,您必须拥有一个可以某种方式表示您的数据的实体。然后:

  • 从现有数据库中选择数据到List<Entity>(或任何实体名称)
  • 根据检索到的内容创建新对象(实体) - 根据需要更改属性
  • 将这些实体插回数据上下文
  • 保存更改。

此代码段的内容(此处我有一个表countries,其中包含ISOCodeCountryName的某些国家/地区;我正在选择一些,并创建基于检索到的新的,将新的那些添加到Linq-to-SQL DataContext并保存到最后):

// create and use the Linq-to-SQL DataContext
using (LinqSampleDataContext ctx = new LinqSampleDataContext())
{
    // select some data
    IQueryable<country> existingCountries = ctx.countries.Where(c => c.CountryID < 100);

    // loop over selected data - create new entities based on data retrieved
    foreach (country c in existingCountries)
    {
        country newCountry = new country();
        newCountry.CountryName = c.CountryName;
        newCountry.ISOCode = "X" + c.ISOCode.Substring(1);

        // add new entities to DataContext
        ctx.countries.InsertOnSubmit(newCountry);
    }

    // submit all the changes
    ctx.SubmitChanges();
}