如何替换所有出现的逗号分隔错误

问题描述 投票:0回答:1

我的 SQL Server 数据库中有以下两个表。我有一个程序对

Transactions
表上的每条记录执行验证,并将逗号分隔的错误保存在
Error_Messages
列中。

ErrorMessages
表包含所有错误消息。

CREATE TABLE dbo.Transactions
(
    ID INT IDENTITY(1,1) PRIMARY KEY,
    Error_Messages VARCHAR(MAX)
)

CREATE TABLE dbo.ErrorMessages
(
    Field_Type varchar(100), 
    Code VARCHAR(100), 
    Error_Msg VARCHAR(300) 
)

TRUNCATE TABLE Transactions

INSERT INTO Transactions(Error_Messages) 
VALUES ('First Name should not contain special symbols, first name length should be less than 250 chars, last name is mandatory');

TRUNCATE TABLE ErrorMessages

INSERT INTO ErrorMessages 
VALUES ('FirstName', 'FirstName_Symbol', 'First Name should not contain special symbols,');
INSERT INTO ErrorMessages 
VALUES ('FirstName', 'FirstName_Length', 'First name length should be less than 250 chars,');
INSERT INTO ErrorMessages 
VALUES ('LastName', 'LastName_Mandatory', 'Last name is mandatory,');

用户可以修复错误并尝试再次运行验证。在运行验证之前,如何替换

Error_Messages
列中出现的所有错误。

例如。如果我正在运行字段类型“FirstName”的验证,那么我将替换

Error_messages
表的
Transactions
列中与名字相关的所有错误,并保持其余错误不变。

sql sql-server
1个回答
0
投票

您可以随时用逗号分割文本,然后与原始文本进行匹配,以消除那些

Field_Type
被重置的文本:

select string_agg(ltrim(value + ','), ' ')
from Transactions cross apply string_split(Error_Messages, ',') e
where ltrim(e.value + ',') not in (
    select Error_Msg from dbo.ErrorMessages
    where Field_Type = 'FirstName' and Error_Msg is not null
);

https://dbfiddle.uk/4u9PzP7d 注意事项包括消息不能嵌入逗号,并且如果源消息不保持同步,则永远无法更改源消息。

© www.soinside.com 2019 - 2024. All rights reserved.