Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql OPENJSON-modify语句忽略字符串的第一部分_Sql_Json_Sql Server_Sql Server 2017 - Fatal编程技术网

Sql OPENJSON-modify语句忽略字符串的第一部分

Sql OPENJSON-modify语句忽略字符串的第一部分,sql,json,sql-server,sql-server-2017,Sql,Json,Sql Server,Sql Server 2017,我们从应用程序接收自动生成的电子邮件,并在电子邮件到达收件箱时将其导出到数据库。该表名为dbo.MailArchive 直到最近,电子邮件的正文一直是这样的 状态:已完成 成功行动计数:250 页面加载计数:250 …不同的号码和状态除外页加载计数后空白行上有一个回车。< /强> 这些数据的全部被写入一个名为Mail\u Body的字段,然后我们使用OPENJSON运行以下语句,将这些行解析为记录中自己的列: DECLARE@PI varchar(7)='%[^'+CHAR(13)+CHAR

我们从应用程序接收自动生成的电子邮件,并在电子邮件到达收件箱时将其导出到数据库。该表名为
dbo.MailArchive

直到最近,电子邮件的正文一直是这样的

状态:已完成
成功行动计数:250
页面加载计数:250
…不同的号码和状态除外<注意>页加载计数后空白行上有一个回车。< /强>

这些数据的全部被写入一个名为
Mail\u Body
的字段,然后我们使用
OPENJSON
运行以下语句,将这些行解析为记录中自己的列:

DECLARE@PI varchar(7)='%[^'+CHAR(13)+CHAR(10)+']%;
选择j.状态,
j、 成功的行动数,
j、 页面加载计数
从dbo.mailm
交叉应用(值(反向(m.Mail\u Body)、PATINDEX(@PI,反向(m.Mail\u Body)))PI(SY,I)
交叉应用(值(反向(填充(PI.SY,1,PI.I.)))S(固定字符串)
交叉应用OPENJSON(CONCAT(“{”,REPLACE(REPLACE(S.FixedString,”:“,”:“),CHAR(13)+CHAR(10),”,“,”),“}”)
带有(状态变量字符(100)“$.Status”,
Successful_Actions_Count int'$“Successful Actions Count”,
页面加载计数int'$.“页面加载计数”')j;
从今天开始,某些电子邮件的正文如下所示:

代理在此运行中未满足定义的成功标准。
状态:已完成
成功行动计数:250
页面加载计数:250

澄清,这是一条新线在顶部,在该行的末尾有一个回车,一个回车在新行和<代码>状态< /代码>行之间的空白行上返回。在这个时候,没有一致的方法来预测哪些电子邮件会使用这一新的行,哪些不会


我如何修改我们的
OPENJSON
语句来表示,如果正文中存在第一行,跳过/忽略它并解析第3行到第5行,否则只需执行上面的操作即可?或者更好地证明它,总是忽略单词
Status

之前的所有内容,因为您的数据有新的前导行和尾随行,我认为一个简单的聚合与
string_split()
和交叉应用将比我以前的XML答案和当前的JSON方法更有效

示例

返回

ID   Status     Action  PageCnt
1    Completed  250     250
注意:如果要查看空值,请使用
外部应用

ID   Status     Action  PageCnt
1    Completed  250     250