Чтение из существующего текстового файла (.txt) в SQL Server 2005 - PullRequest
4 голосов
/ 14 августа 2010

Мое устройство GPS записывает свои данные в текстовый файл на моем сервере.Теперь я хочу, чтобы сервер sql прочитал его и сохранил значения в таблице.Как начать работать с таким сценарием?Любое предложение.

РЕДАКТИРОВАТЬ: Рассмотрим, что это существующий файл с 10 строками, и я уже импортировал его.Теперь файл обновляется новыми 10 строками.Как импортировать новые строки на сервер SQL?

Ответы [ 4 ]

3 голосов
/ 18 августа 2010

Вот пример решения:

/** 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, но я на самом деле создал его отдельно.Тем не менее, я проголосовал за его ответ, так как он опубликовал свой первый.

3 голосов
/ 17 августа 2010

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

Аналогично, вы можете использовать утилиту bcp и установить параметр -f.

2 голосов
/ 14 августа 2010
0 голосов
/ 14 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...