任何人都会知道如何从SQL Server中读取文本文件(即连续填充的日志文件)并将其连续导入到SQL Server表中?如何连续使用SQL Server读取文本文件?
我想仅在存储过程中使用T-SQL。
除了一次读取整个文件外,我还没有在BULK INSERT
或OPENROWSET
中找到任何选项。我将不得不一次重复执行并查找尚未导入的行。 这是一种可能性,但如果文件变大,则效率不高。
是否可以在每次运行时只读取最新的行?
谢谢! 菲利普
任何人都会知道如何从SQL Server中读取文本文件(即连续填充的日志文件)并将其连续导入到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提供程序解析,那么您可以使用linked server作为文本文件。
编辑了这个问题,使其更清晰:我正在寻找一个T-SQL唯一的解决方案(如果可能的话)。不管怎么说,还是要谢谢你。 – 2013-03-23 18:45:24