2010-08-14 2 views
4

Мое устройство gps записывает свои данные в текстовый файл на моем сервере. Теперь я хочу, чтобы сервер sql прочитал его и сохранил значения в таблице. Как начать этот сценарий? Любое предложение.Чтение из существующего текстового файла (.txt) в SQL Server 2005

EDIT: Рассмотрите, что это существующий файл с 10 строками, и я уже импортировал его. Теперь файл обновляется с новыми 10 строками. Как импортировать новые строки в sql-сервер?

ответ

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) 

Хранимая процедура не загружает данные, если только t вот новый набор строк, начиная с последней строки, загруженной в таблицу.

Я понимаю, что это просто выглядит как ответ devmake, но я действительно создал его отдельно. Тем не менее, я поддержал его ответ, так как он опубликовал свой первый.

2
+0

Что происходит, когда один файл журнала обновляется каждую секунду. поэтому массовый импорт также будет иметь предыдущие записи –

+0

@ Пандия Чендур: Я не знаю, что вы подразумеваете под этим? –

+0

один txt-файл с именем «журнал» будет обновляться каждый раз, каждый день и т. Д. –

0

Убедитесь, что ваш путь к файлу является правильным. Это может быть относительным, если он живет на той же машине, что и сервер sql, но если вам не нужен абсолютный путь. Кроме того, сервер sql потребует прав доступа к этому файлу. Может, и не здесь, но все в порядке.

3

Например, вы можете использовать BULK INSERT. Сохраните подсчет строк, которые вы вставили, и установите параметр FIRSTROW из BULK INSERT в следующий раз, чтобы начать работу с новыми строками.

Similary Вы можете использовать утилиту bcp и установить параметр -f.

Смежные вопросы