实际上我在这里直接从存储过程向数据库表(@error
)记录错误。我的要求是我只需要记录一些错误,例如在获取价格时只记录错误。为此,我得到的任何错误都存储在@Error
变量中,我需要检查此错误段落是否包含一些句子,例如“获取价格值时出错”。
SQL Server中是否有任何想法或逻辑,以便我可以检查@error
是否包含错误desc段落中的某些短语?
例如:procedure
ALTER PROCEDURE [dbo].a
@b bigint,
@c smallint,
@d smallint,
@e varchar(50)
AS
BEGIN
BEGIN TRY
DECLARE @b varchar(4000),
@Logger varchar(500),
@b varchar(50),
@d varchar(50) = NULL,
@Mileage int = NULL,
SELECT @b = x
FROM tabl a (a,b,c)
EXEC nmc x,y,z,m
END TRY
BEGIN CATCH
SET @Error = ERROR_MESSAGE()
SET @Logger = ERROR_PROCEDURE()
EXEC [PRC_Save_DB_Exceptions] NULL, 'ERROR', @Logger, @UserName, 'Error while price and key', @Error
END CATCH
END
我在C#catch块中所做的相同功能只是看看:
catch (Exception ex)
{
var regex = new Regex(@".*or data does not exist.*");
var text = "" + ex;
bool exist = false;
var texts = text.Split('.');
foreach (var t in texts)
{
if (regex.IsMatch(t))
{
exist = true;
}
}
if (!exist)
{
Logger.LogError(ConfigSettings.GetErrorMessage(006), ex);
}
}
答案 0 :(得分:0)
这真的很简单。您可以使用LIKE检查另一个字符串中是否存在给定值。 https://docs.microsoft.com/en-us/sql/t-sql/language-elements/like-transact-sql
if @YourVariable like 'error while fetching price value%'
EXEC [PRC_Save_DB_Exceptions] NULL, 'ERROR', @Logger, @UserName, 'Error while price and key', @Error
您也可以使用String.IndexOf在您的dotnet代码中更轻松地完成此操作。 https://msdn.microsoft.com/en-us/library/system.string.indexof(v=vs.110).aspx