【发布时间】:2021-02-13 06:19:04
【问题描述】:
我相当简单的存储过程在第 44 行执行此操作:
IF @a = @b
RAISERROR('blah blah blah', 11, 1)
RETURN
使用 .NET Framework System.Data.SqlClient 库在客户端调用存储过程:
try
{
SqlCommand c = new SqlCommand();
c.CommandType = CommandType.StoredProcedure;
c.CommandText = "procname";
c.ExecuteNonQuery() // execute the stored procedure
}
catch(SqlException sex)
throw sex;
catch(Exception ex)
{
throw ex;
}
当ex被捕获时,其值为blah blah blah + CRLF + 1259
1259 来自哪里?是否对应严重性 11?
【问题讨论】:
-
仅供参考,你真的应该使用
THROW,而不是RAISERROR。 -
@Larnu:旧版 SP,它早于 THROW。
-
@Larnu。我没有使用不受支持的 SQL Server 版本。我使用的是 SQL Server 2017,但该应用程序的许多 SP 可以追溯到几年前。
-
改为捕获
SqlException。它有一个具有更精细细节的Errors属性。
标签: sql-server sql-server-2017 raiserror system.data.sqlclient