1

SQLログファイルからログインの成功と失敗を抽出しようとしています。これは私が仕事に取り掛かることができたという声明です、そして今それを実行するとき私はエラーを受け取ります。どんな助けでも大歓迎です。独立して実行すると、残りはエラーなしで機能するため、最後のステートメントにあることを私は知っています。システムに何も変更されていないので、なぜエラーが発生し始めるのかわかりませんか?

CREATE TABLE [dbo].[#TmpErrorLog]
([LogDate] DATETIME NULL,
[ProcessInfo] VARCHAR(20) NULL,
[Text] VARCHAR(MAX) NULL);

CREATE TABLE [dbo].[#TmpErrorLog2]
([LogDate] DATETIME NULL,
[ProcessInfo] VARCHAR(20) NULL,
[Text] VARCHAR(MAX) NULL,
[LoginAttempt] VARCHAR(20) NULL);


INSERT INTO #TmpErrorLog ([LogDate], [ProcessInfo], [Text])   
EXEC [master].[dbo].[xp_readerrorlog] 0 ;

INSERT INTO #TmpErrorLog2 ([LogDate], [ProcessInfo], [Text], [LoginAttempt])
Select LogDate, ProcessInfo, Replace(Text,'''','"') as Text, SUBSTRING(Text,0,16)      as     LoginAttempt
From #TmpErrorLog
Where LogDate > GETDATE() - 1 and Text like '%\%'

INSERT INTO LogData ([LogDate], [LoginAttempt], [LoginUser])
Select 
LogDate, 
Case LoginAttempt When 'Login succeeded' Then 'Successfull' Else 'Failed' End as      LoginAttempt,
SUBSTRING(SUBSTRING(Text, CHARINDEX('"', Text,1), CHARINDEX('"', Text, CHARINDEX('"',     Text, 0)) - 4),2,50) as LoginUser
From #TmpErrorLog2
Where LogDate Not In(Select LogDate From LogData)

Drop Table #TmpErrorLog
Drop Table #TmpErrorLog2
4

1 に答える 1

4

IIRC、CHARINDEXは-1を返す可能性がありますが、これはSUBSTRINGの有効なパラメーターではありません。CHARINDEXでヒットしないものがいくつかあると思います。

于 2013-01-27T22:59:11.180 に答える