插入与更新
本文关键字:更新 插入 | 更新日期: 2023-09-27 18:26:57
我有以下查询:
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["chestionar"].ConnectionString);
SqlCommand cmd = new SqlCommand("INSERT INTO Raspunsuri Values(@raspuns,@cnp,@data,'1',@ip,@idsesiune)", con);
cmd.Parameters.AddWithValue("@cnp", Session["sesiune_cnp"]);
cmd.Parameters.AddWithValue("@raspuns", textbox1.Text);
cmd.Parameters.AddWithValue("@data", DateTime.Now.ToLocalTime());
cmd.Parameters.AddWithValue("@ip",ip);
cmd.Parameters.AddWithValue("@idsesiune", id_sesiune);
try
{
con.Open();
cmd.ExecuteNonQuery();
Response.Redirect("User2.aspx");
}
catch (Exception ex)
{
Console.WriteLine("Error:" + ex);
}
finally
{
con.Close();
}
我需要的是看看表中是否有任何记录,以及是否有更新或插入它。我该如何做到这一点?
由于涉及大量的脚本编写,这可能是在存储过程中完成的最佳方式(内联会很混乱!)。
将参数传递到存储过程并执行以下操作:
IF EXISTS(SELECT cnp FROM Raspunsuri WHERE cnp=@cnp)
BEGIN
UPDATE ...
WHERE cnp=@cnp
END
ELSE
BEGIN
INSERT INTO....
END
假设@cnp
是您的主密钥
然后,您的SqlCommand将更改为:
SqlCommand cmd = new SqlCommand("sp_StoredProcedureName", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@cnp", Session["sesiune_cnp"]);
cmd.Parameters.AddWithValue("@raspuns", textbox1.Text);
cmd.Parameters.AddWithValue("@data", DateTime.Now.ToLocalTime());
cmd.Parameters.AddWithValue("@ip",ip);
cmd.Parameters.AddWithValue("@idsesiune", id_sesiune);
您可以在SQL中使用Exists函数。例如
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["chestionar"].ConnectionString);
SqlCommand cmd = new SqlCommand("if Exists(Select 1 from Raspunsuri where <your unique criteria>)'r'n" +
"Update Raspunsuri set <values you want to set> where <your unique criteria'r'n" +
"else'r'n" +
"INSERT INTO Raspunsuri Values(@raspuns,@cnp,@data,'1',@ip,@idsesiune)", con);
cmd.Parameters.AddWithValue("@cnp", Session["sesiune_cnp"]);
cmd.Parameters.AddWithValue("@raspuns", textbox1.Text);
cmd.Parameters.AddWithValue("@data", DateTime.Now.ToLocalTime());
cmd.Parameters.AddWithValue("@ip",ip);
cmd.Parameters.AddWithValue("@idsesiune", id_sesiune);
这应该可以完成
您可以使用SQL Server中的@@ROWCOUNT
功能。
UPDATE Raspunsuri SET (...) WHERE PrimaryKeyColumn='YourValue'
IF @@ROWCOUNT=0
INSERT INTO Raspunsuri VALUES (...)
类似的问题:插入/更新到Sql
我需要的是查看表中是否有任何记录,以及是否有其他更新插入我怎样才能做到这一点?
写正确的SQL?
你需要做的基本事情被称为"Upsert"。
http://www.databasejournal.com/features/mssql/article.php/3739131/UPSERT-Functionality-in-SQL-Server-2008.htm
有一个很好的解释。
首先,您可以通过将查询写为"Select count(*)from tablename where columnwalue="something"来检查表中是否存在记录。如果count大于0,则表中有记录。因此,在这种情况下,您可以写一个Update语句,也可以写Insert语句。这可以写在代码中或写一个存储过程。
我需要的是看看表中是否有记录比更新其他插入它。我如何才能做到这一点?
我喜欢@Alex的方法
-- For each row in source
BEGIN TRAN
UPDATE target
SET <target_columns> = <source_values>
WHERE <target_expression>
IF (@@ROWCOUNT = 0)
INSERT target (<target_columns>)
VALUES (<source_values>)
COMMIT