0

我正在构建一个 TSQL 查询来解析来自 FileZilla 的 FTP 日志。我想弄清楚是否有办法从当前行之前的一行获取信息?

例如,我已经解析出以下过程:“STOR file.exe”

FileZilla 直到下一行才说 STOR 是否成功。所以我想检查下一行,看看 STOR 是成功还是不成功?

人们也可以尝试多次存储文件,所以我想获得其状态的最新版本。

来自日志文件的示例信息:

   (000005) 4/10/2010 14:55:30 PM - ftp_login_name (IP Address)> STOR file.exe
   (000005) 4/10/2010 14:55:30 PM - ftp_login_name (IP Address)> 150 Opening data for transfer.
   (000005) 4/10/2010 14:55:30 PM - ftp_login_name (IP Address)> 226 Transfer OK

我想在查询中添加一列,说明 STOR 成功或不成功。

谢谢!

4

2 回答 2

2

假设您已将这些行解析为实际列,并且您拥有 SQL Server 2005 或更高版本。您可以使用CROSS APPLY下面的示例查询(未经测试)。我希望这有帮助。

select o.*, prev.*
from FTPLog o
cross apply 
 (
   select top 1 *
   from FTPLog P where P.LogDate < O.LogDate 
   order by LogDate DESC
 ) prev
于 2011-08-12T16:54:12.790 回答
1

James 的想法是正确的,但如果您的日志日期完全相同(从您的示例中看起来可能),可能会出现一些问题。您也许可以添加一个标识列以在插入数据时强制排序,然后您可以在标识列上使用 James 的概念。

不仅如此,TSQL 可能不是这个项目的最佳选择,至少它本身不是。虽然您可以使用一些技术来使其按顺序迭代,但它不如某些其他语言那么好。您可能需要考虑在 Python 或 Perl 甚至 C# 等工具中解析文件,该工具更擅长文本处理,更擅长顺序处理数据。

于 2011-08-12T17:16:57.533 回答