任何人都会知道如何从 SQL Server 读取文本文件(即连续填充的日志文件)并将其连续导入 SQL Server 表中?
例如,我只想在存储过程中使用T-SQL 。
除了一次读取整个文件之外,BULK INSERT
我还没有找到任何选项。OPENROWSET
我将不得不一次又一次地重复并寻找尚未导入的行。如果文件变大,这是一种可能性,但效率不高。
是否可以在每次运行时只读取最新的行?
谢谢 !菲利普
任何人都会知道如何从 SQL Server 读取文本文件(即连续填充的日志文件)并将其连续导入 SQL Server 表中?
例如,我只想在存储过程中使用T-SQL 。
除了一次读取整个文件之外,BULK INSERT
我还没有找到任何选项。OPENROWSET
我将不得不一次又一次地重复并寻找尚未导入的行。如果文件变大,这是一种可能性,但效率不高。
是否可以在每次运行时只读取最新的行?
谢谢 !菲利普
您可以使用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
当文件仍在被写入时,事件会触发。您可能必须在读取日志文件之前添加延迟。
如果您的文件可由 Jet 提供程序解析,您可能能够使用链接服务器到文本文件。