asp.net:只有在UPDATE的子句WHERE找到零记录时才在oracle表中INSERT

时间:2014-11-04 13:00:19

标签: c# asp.net oracle

我正在开发一个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”子句的记录的选择计数,然后如果我找到零结果我会做一个插入,如果我发现至少一个结果我会做更新。但我发现这个解决方案有点重。

2 个答案:

答案 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";