如何仅更新表的 2 列并另存为新记录?

Posted

技术标签:

【中文标题】如何仅更新表的 2 列并另存为新记录?【英文标题】:How to update only 2 columns of table and save as new record? 【发布时间】:2020-06-11 05:43:15 【问题描述】:

假设我有 SQL 数据库表作为客户,并且(它有主键 ID)表的列类似于 VisitDate、Company、CompanyRepresentative、City、Phone、E-mail、VisitNotes、Stuation(Lost、Signed 等)、VisitTime (1-2-3..)

我只想更新 VisitNotes 和 Stuation 列并将记录另存为新行。所以它应该给我其他字段相同但 VisitNotes 和 Stuation 改变了。

请看下文;

enter`  if (!string.IsNullOrEmpty(Session["ID"].ToString()))
            

                SqlCommand cmdUpdate = new SqlCommand("UPDATE Customer_list SET Company=@Company,VisitDate=@VisitDate,Stuation=@Stuation,VisitNotes=@VisitNotes,City=@City,Phone=@Phone,Email=@Email,VisitTime=@VisitTime, WHERE ID='" + Session["ID"].ToString() + "'", connBizim);
                cmdUpdate.Parameters.AddWithValue("@VisitDate", Convert.ToDateTime(txtDate.Text));
                cmdUpdate.Parameters.AddWithValue("@Company", txtCompany.Text);

                cmdUpdate.Parameters.AddWithValue("@Phone", txtPhone.Text);
                cmdUpdate.Parameters.AddWithValue("@Stuation", DpStuation.Text);
                cmdUpdate.Parameters.AddWithValue("@EMAIL", txtEmail.Text);

                cmdUpdate.Parameters.AddWithValue("@VisitNotes", txtVisitNotes.Text);
                cmdUpdate.Parameters.AddWithValue("@City", txtCity.Text);
                cmdUpdate.Parameters.AddWithValue("@VisitTime", Convert.ToInt32(txtVisitTime.Text) + 1);                  
                conn.Open();
                cmdUpdate.ExecuteNonQuery();
                conn.Close();
                Session["ID"] = "";

            
            else
            
                SqlCommand cmdinsert = new SqlCommand("INSERT INTO Customer_list SET Company=@Company,VisitDate=@VisitDate,Stuation=@Stuation,VisitNotes=@VisitNotes,City=@City,Phone=@Phone,Email=@Email,VisitTime=@VisitTime, WHERE ID='" + Session["ID"].ToString() + "'", connBizim);
                cmdinsert.Parameters.AddWithValue("@VisitDate", Convert.ToDateTime(txtDate.Text));
                cmdinsert.Parameters.AddWithValue("@Company", txtCompany.Text);

                cmdinsert.Parameters.AddWithValue("@Phone", txtPhone.Text);
                cmdinsert.Parameters.AddWithValue("@Stuation", DpStuation.Text);
                cmdinsert.Parameters.AddWithValue("@EMAIL", txtEmail.Text);

                cmdinsert.Parameters.AddWithValue("@VisitNotes", txtVisitNotes.Text);
                cmdinsert.Parameters.AddWithValue("@City", txtCity.Text);
                cmdinsert.Parameters.AddWithValue("@VisitTime", Convert.ToInt32(txtVisitTime.Text)); 
                conn.Open();
                cmdinsert.ExecuteNonQuery();
                conn.Close();
                Session["ID"] = "";
                Response.Redirect("Customer_List.aspx");
            `  

【问题讨论】:

表格有,而不是字段。 起立鼓掌,非常有帮助 SQL 中的字段是别的东西,要么是日期/时间值的一部分,要么是记录的一部分。 @HbHb 尝试添加您尝试达到结果的代码,这将有助于读者理解问题并轻松提供解决方案。 轻松为您提供帮助:minimal reproducible example 【参考方案1】:

你可以用INSERT INTO SELECT来做。

我为你准备了一个小演示。这不是你的例子,但它会帮助你了解如何。您现在需要根据您的具体示例对其进行调整。

Here is a demo

对于表:

create table Customer  (ID int, name varchar(10), VisitNotes  int, Stuation  int)

应该是这样的:

insert into Customer
select distinct id, name, 5, 6
from customer
where id = 1;

【讨论】:

对于 INSERT INTO SELECT 我不应该需要两个不同的表吗?【参考方案2】:

从表格中选择时更改访问日期和状态:

insert into test 
select 'NewVisitDate' as VisitDate ,Company,CompanyRepresentative,City,Phone,E-mail,
VisitNotes,'NewStuation' as Stuation  
from test;

【讨论】:

以上是关于如何仅更新表的 2 列并另存为新记录?的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA 删除公式并另存为 v2

从PCAP文件中提取时间并另存为CSV文件

如何在 BufferedImage 中使颜色透明并另存为 PNG

生成 div 的图像并另存为

PyPDF2如何实现按照PDF页码提取后并另存为PDF格式文件?

提示文件打开,进行更改并另存为另一个副本,然后关闭+取消保存原始文件