Sql server 2005 从sql server 2005中的现有文本文件(.txt)中读取
我的gps设备将其数据写入服务器中的文本文件。现在我希望SQLServer读取它并将值存储在表中。如何开始这种场景?任何建议 编辑: 考虑它是一个具有10行的现有文件,并且我已经导入了它。现在,文件更新为新的10行。如何将新行导入sql server ,或者,如果不需要数据转换,则可能需要SSI 见:Sql server 2005 从sql server 2005中的现有文本文件(.txt)中读取,sql-server-2005,text-files,Sql Server 2005,Text Files,我的gps设备将其数据写入服务器中的文本文件。现在我希望SQLServer读取它并将值存储在表中。如何开始这种场景?任何建议 编辑: 考虑它是一个具有10行的现有文件,并且我已经导入了它。现在,文件更新为新的10行。如何将新行导入sql server ,或者,如果不需要数据转换,则可能需要SSI 见: 确保文件路径正确。如果它与sql server位于同一台计算机上,则它可以是相对的,但如果不是,则需要绝对路径。此外,sql server还需要对该文件位置的权限。这里可能不是这样,但没关
批量插入
的参数FIRSTROW
,以便从新行开始
同样,您可以使用实用程序设置
-f
参数。以下是一个示例解决方案:
/** Table to hold GPS data **/
CREATE TABLE Pings (
RowID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
PingDate DATETIME,
Lat FLOAT,
Long FLOAT
)
/** View for bulk insert **/
CREATE VIEW V_Pings AS
SELECT
PingDate,
Lat,
Long
FROM Pings
GPS数据来自管道分隔文件>C:\GPS\Pings
2010/01/01 00:00:00|30.1|50.1
2010/01/01 00:00:01|30.1|50.2
2010/01/01 00:00:02|30.1|50.3
2010/01/01 00:00:03|30.1|50.4
2010/01/01 00:00:04|30.1|50.5
您有一个正在通过SQL代理间歇性调用的存储过程:
CREATE PROCEDURE usp_LoadPings AS
DECLARE
@firstRow INT,
@sql NVARCHAR(1000)
SELECT TOP 1 @firstRow = RowID + 1
FROM Pings ORDER BY RowID DESC
SET @sql = N'
BULK INSERT V_Pings
FROM ''C:\GPS\Pings.txt''
WITH (
FIELDTERMINATOR =''|'',
ROWTERMINATOR =''\n'',
FIRSTROW = ' + CAST(@firstRow AS NVARCHAR(50)) + '
)'
EXEC(@sql)
存储过程不会加载数据,除非在表中加载的最后一行之后有一组新行开始
我意识到这看起来只是devmake答案的一个实现,但实际上我单独创建了它。也就是说,自从他第一次发布他的答案后,我就对他的答案投了更高的票。当一个日志文件每秒更新一次时会发生什么。所以批量进口也会有以前的情况records@PandiyaChendur:我不知道你说的是什么意思?一个名为“log”的txt文件每天都会更新