我正在尝试创建一个进行更新的postgresql函数。我想让行受影响。我知道可以使用GET DIAGNOSTICS rows_affected = ROW_COUNT
来完成。但是我正在尝试使用Dapper Execute
函数,该函数可以自行返回受影响的行。据我所能确定的,这仅在您有要调用的硬编码查询时才有效,例如在C#中
IDbConnection dbConnection = new NpgsqlConnection(strConnection)
string command = "UPDATE myschema.mytable SET email = '' WHERE email NOT LIKE '%@%';"
int rowsAffected = dbConnection.Execute(command);
我想创建一个功能相同的函数,并让Dapper使用Execute
而不是Query
来调用它。这是我到目前为止的内容:
CREATE FUNCTION "Xtream"."fnUpdateUserID" () RETURNS VOID
AS $$
BEGIN
UPDATE myschema.mytable
SET email = ''
WHERE email NOT LIKE '%@%';
END;
$$ LANGUAGE 'plpgsql';
所以我的问题是,有没有一种方法可以使行受到影响而无需向该函数添加类似int的内容?换句话说,可以访问以下信息:“查询成功返回:受影响的2行,执行时间为11毫秒”。直接在PostgreSQL查询窗口中调用UPDATE myschema.mytable SET email = '' WHERE email NOT LIKE '%@%'
时返回。我知道RETURNS VOID
不能满足我的要求。
用另一种方式表达这一点,是否可以在PostgreSQL插入或更新函数上使用Dapper Execute
?
答案 0 :(得分:0)
由于我一直无法找到自己想要的方法,所以我继续使用上面提到的GET DIAGNOSTICS
解决方案。我将其发布为后代的答案。我仍然欢迎其他解决方案(如果有)。
按如下所示更改功能:
CREATE FUNCTION "Xtream"."fnUpdateUserID" () RETURNS integer
AS $$
DECLARE rows_affected integer;
BEGIN
UPDATE myschema.mytable
SET email = ''
WHERE email NOT LIKE '%@%';
GET DIAGNOSTICS rows_affected = ROW_COUNT;
RETURN rows_affected;
END;
$$ LANGUAGE 'plpgsql';
然后像这样更改Dapper调用:
IDbConnection dbConnection = new NpgsqlConnection(strConnection)
string command = "UPDATE myschema.mytable SET email = '' WHERE email NOT LIKE '%@%';"
int rowsAffected = dbConnection.Query<int>(command).FirstOrDefault;