【问题标题】:How to update only 2 columns of table and save as new record?如何仅更新表的 2 列并另存为新记录?
【发布时间】: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

标签: c# sql tsql


【解决方案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;

【讨论】:

    猜你喜欢
    • 2020-11-07
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多