хранимая процедура для импорта TXT в SQL Server БД - PullRequest
0 голосов
/ 13 мая 2010

Мне приходится вставлять новые записи в базу данных каждый день из текстового файла (с разделителями табуляции). Я пытаюсь превратить это в хранимую процедуру с параметром для файла для чтения данных.

CREATE PROCEDURE dbo.UpdateTable

    @FilePath

    BULK INSERT TMP_UPTable 
    FROM @FilePath
    WITH 
    ( 
        FIRSTROW = 2, 
        MAXERRORS = 0, 
        FIELDTERMINATOR = '\t', 
        ROWTERMINATOR = '\n' 
    )

    RETURN

Тогда я бы вызвал эту хранимую процедуру из моего кода (C #), указав файл для вставки.

Это, очевидно, не работает, так как я могу это сделать?

Просто чтобы прояснить, проблема в том, что я не могу передать параметр @FilePath в предложение FROM, или, по крайней мере, я не знаю как.

Ответы [ 2 ]

1 голос
/ 13 мая 2010

Извините, я неправильно понял. Вам необходимо динамически создать инструкцию SQL, а затем выполнить ее:

    CREATE procedure dbo.UpdateTable

    @FilePath varchar(max)
AS

 declare @sql varchar(max)
 declare @parameters varchar(100)
 set @parameters = 'FIRSTROW = 2, MAXERRORS = 0, FIELDTERMINATOR = ''\\t'', ROWTERMINATOR = ''\\n'' '
 SET @SQL = 'BULK INSERT TMP_UPTable FROM ' + @FilePath + @parameters

EXEC (@SQL)

RETURN
0 голосов
/ 05 декабря 2015

Извините, если я опоздал, но я бы предложил другой подход - откройте файл в приложении C # и преобразуйте его в нечто более удобное для SQL, DataTable или даже XML. В C # у вас есть полный контроль над тем, как вы анализируете файлы. Затем напишите хранимую процедуру, чтобы принять ваш DataTable или XML. DataTable предпочтительнее, но не может использоваться с Entity Framework.

Существует множество справок о том, как выполнять вставки путем присоединения к этому виду ввода, и SQL Server оптимизирован для операций над множествами.

...