如何仅更新表的 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 列并另存为新记录?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 BufferedImage 中使颜色透明并另存为 PNG