Sql server 在SQL Server中搜索可能包含在不同段落中的句子
实际上,这里我直接从存储过程将错误记录到数据库表(Sql server 在SQL Server中搜索可能包含在不同段落中的句子,sql-server,stored-procedures,string-matching,Sql Server,Stored Procedures,String Matching,实际上,这里我直接从存储过程将错误记录到数据库表(@error)。我的要求是我只需要记录一些错误,例如在获取价格值时只记录错误。因为我得到的任何错误都存储在@error变量中,我需要检查此错误段落是否包含“获取价格值时出错”之类的句子 SQL Server中是否有任何想法或逻辑,以便我检查@error是否在error desc段落中包含某些短语 例如:程序 ALTER PROCEDURE [dbo].a @b bigint, @c smallint, @d smallin
@error
)。我的要求是我只需要记录一些错误,例如在获取价格值时只记录错误。因为我得到的任何错误都存储在@error
变量中,我需要检查此错误段落是否包含“获取价格值时出错”之类的句子
SQL Server中是否有任何想法或逻辑,以便我检查@error
是否在error desc段落中包含某些短语
例如:程序
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 block中所做的功能相同,请看一看:
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);
}
}
这真的很简单。您可以使用LIKE检查给定值是否存在于另一个字符串中
在dotnet代码中,也可以使用String.IndexOf轻松一点 这真的很简单。您可以使用LIKE检查给定值是否存在于另一个字符串中
在dotnet代码中,也可以使用String.IndexOf轻松一点 您对查询进行了太多的模糊处理,使其不再有效。您在这里至少声明了三次@b和两次@d。发布时,您的代码将永远无法编译。对于手头的问题,您可以简单地使用like查询变量。事实上,我的SP正在工作,但在发布时,我更改了变量(因为没有显示我的原始数据)别担心。你有什么想法吗?有人有这样的逻辑吗?你把你的查询弄得太模糊了,根本就不再有效了。您在这里至少声明了三次@b和两次@d。发布时,您的代码将永远无法编译。对于手头的问题,您可以简单地使用like查询变量。实际上,我有一个工作SP,但在发布时,我更改了变量(因为没有显示原始数据)。您有什么想法吗?有人有这个逻辑吗?
if @YourVariable like 'error while fetching price value%'
EXEC [PRC_Save_DB_Exceptions] NULL, 'ERROR', @Logger, @UserName, 'Error while price and key', @Error