搜索可能包含在SQL Server中不同段落中的句子

时间:2017-07-13 13:13:21

标签: sql-server stored-procedures string-matching

实际上我在这里直接从存储过程向数据库表(@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);
    }
}

1 个答案:

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