我的 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
列中与名字相关的所有错误,并保持其余错误不变。
您可以随时用逗号分割文本,然后与原始文本进行匹配,以消除那些
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 注意事项包括消息不能嵌入逗号,并且如果源消息不保持同步,则永远无法更改源消息。