如何在T-SQL中解析xp_readerrorlog结果里单引号间的值
提取SQL Server错误日志中登录成功记录的用户名
假设你的临时表名为#ErrorLog,包含LogText列,且已经过滤出以Login succeeded开头的行,可以通过SQL Server的字符串函数组合来提取单引号内的内容:
核心SQL语句
SELECT SUBSTRING( LogText, CHARINDEX('''', LogText) + 1, CHARINDEX('''', LogText, CHARINDEX('''', LogText) + 1) - CHARINDEX('''', LogText) - 1 ) AS LoginUserName FROM #ErrorLog WHERE LogText LIKE 'Login succeeded%'
函数说明
CHARINDEX('''', LogText):定位第一个单引号的位置(SQL中用两个单引号表示转义的单引号)CHARINDEX('''', LogText, 第一个单引号位置 + 1):从第一个单引号的下一位开始,定位第二个单引号的位置SUBSTRING:从第一个单引号的下一位开始截取内容,截取长度为两个单引号的位置差减1,刚好得到单引号包裹的用户名
测试验证
如果#ErrorLog中有以下两条记录:
Login succeeded for user 'Frank'. Connection made using SQL Server authentication.
Login succeeded for user 'Domain\User_999'. Connection made using Integrated authentication.
执行上述SQL后,会得到结果:
| LoginUserName |
|---|
| Frank |
| Domain\User_999 |
内容的提问来源于stack exchange,提问作者user2233506
相关产品推荐
相关产品推荐

