0

我有这个程序,最后执行 aRAISEERROR和 a return @tmp_cnt。这RAISEERROR不会阻止程序执行,因为它也应该返回tmp_cnt。我在 .NET 中使用它,我的代码进入该catch (SqlException e)部分,因此tmp_cnt不会返回。这是它的代码

(string, int) result;
result.Item1 = null;
result.Item2 = -1;

try {
  result.Item2 = await _context.Database.ExecuteSqlRawAsync("EXECUTE core.STORED_PROCEDURE", params);
} catch (SqlException e) {
  foreach(SqlError error in e.Errors) {
    if (error.Class > 10) {
      result.Item1 = error.Message;
    }
  }
}

这样,我只得到error.Message剩下的result.Item2-1 并且我知道这是正常的事情,因为这是它应该做的。如果我删除该try/catch部分,应用程序会引发异常和代码 500。我的问题是,有没有办法从 .NET 中的存储过程中获取RAISEERROR和?return这是 SQL 部分

IF @tmp_cnt < @ent_cnt
BEGIN
DECLARE @msg AS NVARCHAR(MAX) = CONCAT('Not all of the selected entities are eligible for change. Will be changed for ',
  CAST(@tmp_cnt AS NVARCHAR(50)), ' out of the selected ', CAST(@ent_cnt AS NVARCHAR(50)), ' entities.')
RAISERROR(@msg, 15, 1)
RETURN @tmp_cnt;
END

如果不可能,您是否曾经偶然发现过这样的场景,是否有解决方法?

4

0 回答 0