我正在开发一个asp.net应用程序。我想知道如何更新oracle表记录的字段,如果记录不存在,插入它。
我有一个包含以下字段NAME和SURNAME的表格。
我想将SURNAME更改为NAME等于=“name”的记录的“new_surname”。但是,如果表中的任何记录都不包含字段,则NAME等于名称我想插入新记录(SURNAME = new_surname和NAME = name)。
这是我的代码:
OracleConnection connection = new OracleConnection(connectionstring);
try
{
connection.Open();
OracleCommand command = connection.CreateCommand();
string sql = "UPDATE TABLE SET SURNAME=\'new_surname\' WHERE NAME=\'name\'";
command.CommandText = sql;
command.ExecuteNonQuery();
connection.Close();
}
catch (Exception exp)
{
}
仅当更新找到与“where”子句匹配的零记录时,是否存在执行插入的最佳方法。我想第一次做匹配“where”子句的记录的选择计数,然后如果我找到零结果我会做一个插入,如果我发现至少一个结果我会做更新。但我发现这个解决方案有点重。
答案 0 :(得分:2)
无法测试,但你可以试试这个
using(OracleConnection connection = new OracleConnection(connectionstring))
using(OracleCommand command = connection.CreateCommand())
{
connection.Open();
string sql = @"MERGE INTO TABLE t USING dual on(name='name')
WHEN NOT MATCHED THEN INSERT (name, surname) values ('name', 'new_surname')
WHEN MATCHED THEN UPDATE SET surname = 'new_surname'";
command.CommandText = sql;
command.ExecuteNonQuery();
}
答案 1 :(得分:0)
您可以将查询修改为:
string sql = @"IF EXISTS (SELECT * FROM \'Given Table\' WHERE NAME=\'name\') THEN
BEGIN
--your update query
END
ELSE
BEGIN
-- your Insert Query
END
END IF";