我的gps设备将其数据写入我服务器中的文本文件。现在我希望sql server读取它并将值存储在表中。如何开始这种情况?任何建议。
修改 考虑它是一个有10行的现有文件,我已经导入了它。现在,文件将使用新的10行进行更新。如何将新行导入sql server?
答案 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)
SqlBulkCopy或TSQL BULK INSERT,或者如果不需要数据转换,则可以使用SSIS Bulk Insert Task。
见:
答案 3 :(得分:0)
确保您的文件路径正确无误。它可以是相对的,如果它与sql server在同一台机器上,但如果不是,你需要一个绝对路径。此外,sql server需要该文件位置的权限。也许不是这里的情况,但没关系。