1

任何人都会知道如何从 SQL Server 读取文本文件(即连续填充的日志文件)并将其连续导入 SQL Server 表中?

例如,我只想在存储过程中使用T-SQL 。

除了一次读取整个文件之外,BULK INSERT我还没有找到任何选项。OPENROWSET我将不得不一次又一次地重复并寻找尚未导入的行。如果文件变大,这是一种可能性,但效率不高。

是否可以在每次运行时只读取最新的行?

谢谢 !菲利普

4

2 回答 2

2

您可以使用FileSystemWatcher以便在日志文件更改时收到通知

FileSystemWatcher watcher = new FileSystemWatcher();

watcher.Path = @"C:\PathOfTheLogfile";
watcher.Filter = "MyLogfile.txt"; // You can also use wildcards here.

watcher.NotifyFilter = NotifyFilters.LastWrite;
watcher.Changed += new FileSystemEventHandler(Watcher_Changed);
watcher.Created += new FileSystemEventHandler(Watcher_Changed);

watcher.EnableRaisingEvents = true; // Start watching.

...

private static void Watcher_Changed(object source, FileSystemEventArgs e)
{
    if (e.ChangeType == WatcherChangeTypes.Created) {
        //TODO: Read log from beginning
    } else {
        //TODO: Read log from last position
    }
    //TODO: write to MSSQL
    //TODO: remember last log file position
}

有时,FileSystemWatcher当文件仍在被写入时,事件会触发。您可能必须在读取日志文件之前添加延迟。

于 2013-03-23T17:58:15.997 回答
0

如果您的文件可由 Jet 提供程序解析,您可能能够使用链接服务器到文本文件。

于 2013-03-24T16:19:05.807 回答