Как импортировать данные из файла .txt для заполнения таблицы в SQL Server - PullRequest
0 голосов
/ 27 марта 2019

Каждый день файл PPE.txt с данными клиентов, разделенными точкой с запятой и всегда с одинаковым расположением, сохраняется в определенном каталоге файлов.

Каждый день кто-то должен обновить определенную таблицу из нашей базы данных на основев этом PPE.txt.

Я хочу автоматизировать этот процесс с помощью сценария SQL

Я решил, что решением будет импортировать данные с помощью сценария из этого файла .txt всозданную таблицу, а затем выполните обновление.

То, что у меня есть до сих пор, это

IF EXISTS (SELECT 1 FROM Sysobjects WHERE name LIKE 'CX_PPEList_TMP%')
   DROP TABLE CX_PPEList_TMP
GO

CREATE TABLE CX_PPEList_TMP  
(
    Type_Registy CHAR(1),
    Number_Person INTEGER,
    CPF_CNPJ VARCHAR(14),
    Type_Person CHAR(1),
    Name_Person VARCHAR(80),
    Name_Agency VARCHAR(40),
    Name_Office VARCHAR(40),
    Number_Title_Related INTEGER,
    Name_Title_Related VARCHAR(80)
)

UPDATE Table1
SET SN_Policaly_Exposed = 'Y'
WHERE Table1.CD_Personal_Number = CX_PPEList_TMP.CPF_CNPJ
  AND Table1.SN_Policaly_Exposed = 'N'

UPDATE Table1
SET SN_Policaly_Exposed = 'N'
WHERE Table1.CD_Personal_Number NOT IN (SELECT CX_PPEList_TMP.CPF_CNPJ 
                                        FROM CX_PPEList_TMP)
  AND Table1.SN_Policaly_Exposed = 'Y'

Я знаю, что много не дал, но это потому, что у меня еще мало,

Я хочу заполнить временную таблицу CX_PEPList_TMP данными из файла PEP.txt через скрипт, чтобы я мог просто выполнить этот скрипт для обновления своей базы данных.Но я не знаю ни одной команды, которую мог бы использовать, и не нашел ни одного в своем исследовании.

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 27 марта 2019

Использование OPENROWSET

Вы можете читать текстовые файлы, используя OPENROWSET , параметр (сначала необходимо включить специальные запросы)

Использование Microsoft Text Driver

SELECT * FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=C:\Docs\csv\;',
'SELECT * FROM PPE.txt')

Использование поставщика OLEDB

SELECT 
    * 
FROM 
OPENROWSET
        ('Microsoft.ACE.OLEDB.12.0','Text;Database=C:\Docs\csv\;IMEX=1;','SELECT * 
FROM PPE.txt') t

Использование BULK INSERT

Вы можете импортировать данные текстового файла в промежуточную таблицу и обновлять данные из нее:

BULK INSERT dbo.StagingTable
FROM 'C:\PPE.txt'
WITH 
  (
    FIELDTERMINATOR = ';', 
    ROWTERMINATOR = '\n' 
  )
1 голос
/ 27 марта 2019

В вашем случае, я рекомендую вам использовать ETL, как SSIS, с ним гораздо удобнее и проще работать, и вы также можете Schedule пакет для выполнения в определенное время

...