从sql server 2005中的现有文本文件(.txt)中读取

时间:2010-08-14 04:01:46

标签: sql-server-2005 text-files

我的gps设备将其数据写入我服务器中的文本文件。现在我希望sql server读取它并将值存储在表中。如何开始这种情况?任何建议。

修改 考虑它是一个有10行的现有文件,我已经导入了它。现在,文件将使用新的10行进行更新。如何将新行导入sql server?

4 个答案:

答案 0 :(得分:3)

例如,您可以使用BULK INSERT。保存已插入的行数,并在下次相应地设置FIRSTROW的参数BULK INSERT,以便从新行开始。

类似,您可以使用bcp实用程序并设置-f参数。

答案 1 :(得分:3)

以下是一个示例解决方案:

/** 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的答案的实现,但我实际上是单独创建的。也就是说,自从他发布第一篇文章以来,我就给出了答案。

答案 2 :(得分:2)

答案 3 :(得分:0)

确保您的文件路径正确无误。它可以是相对的,如果它与sql server在同一台机器上,但如果不是,你需要一个绝对路径。此外,sql server需要该文件位置的权限。也许不是这里的情况,但没关系。