SQL Server Как я могу получить сообщение об ошибке с кодом ошибки? - PullRequest
0 голосов
/ 20 марта 2019
LogDate                 ProcessInfo Text
...
2019-03-20 09:45:25.480 Logon       오류: 18456, 심각도: 14, 상태: 5.
2019-03-20 09:45:25.480 Logon       Login failed for user 'NE\NEO$'. 원인: 제공된 이름과 일치하는 로그인을 찾을 수 없습니다. [클라이언트: <local machine>]
2019-03-20 09:45:48.260 Logon       오류: 18456, 심각도: 14, 상태: 5.
2019-03-20 09:45:48.260 Logon       Login failed for user 'NE\NEO$'. 원인: 제공된 이름과 일치하는 로그인을 찾을 수 없습니다. [클라이언트: <local machine>]
...

Когда я выполняю sp_readerrorlog, я получаю эти сообщения об ошибках.
(Сообщения об ошибках действительно являются его частью в общих журналах ошибок.
и другие ProcessInfo. Значение ошибки существует.)

Я хочу получать сообщения об ошибках, связанных с кодами ошибок. ( Это означает две строки, состоящие из множеств. И сообщение об ошибке, что я хочу, не зависит от входа в систему.) У меня вопрос, как я могу получить сообщение об ошибке с кодом ошибки из запроса.

Ответы [ 2 ]

1 голос
/ 20 марта 2019
if object_id('tempdb..#log') is not null drop table #log;

create table #log (id int identity primary key clustered, 
                   LogDate datetime,
                   ProcessInfo varchar(15),
                   txt varchar(8000));

insert into #log (LogDate, ProcessInfo, txt) exec xp_readerrorlog 0,1;

with cte as
(
select *,
       lead(txt) over (order by id) as txt1
from #log
)

select *
from cte
where txt like 'Error:%';

Вот пример вывода:

enter image description here

0 голосов
/ 20 марта 2019

Чтобы сделать это таким образом, вам потребуется выполнить хранимую процедуру дважды, по одному разу для каждого термина, который вы хотите найти.

Вы можете объединить их в один запрос, используя что-то вроде следующего

sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO

SELECT * FROM OPENROWSET('SQLNCLI', 
  'Server=   (local)\<instance_name>;Trusted_Connection=yes;',
  'exec sp_readerrorlog 0, 1, ''오류:'' WITH RESULT SETS 
  (( 
    EventTime nvarchar(25), 
    Login nvarchar(50), 
    Message nvarchar(4000)
  ))')
UNION
SELECT * FROM OPENROWSET('SQLNCLI', 
  'Server=(local)\<instance_name>;Trusted_Connection=yes;',
  'exec sp_readerrorlog 0, 1, ''Login failed for user'' WITH RESULT SETS 
  (( 
    EventTime nvarchar(25), 
    Login nvarchar(50), 
    Message nvarchar(4000)
  ))')

Вам нужно будет заменить <instance_name> на ваш экземпляр

Более подробную информацию об этом процессе можно найти по этому вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...