简体   繁体   English

如何从.txt文件导入数据以填充SQL Server中的表

[英]How to import data from .txt file to populate a table in SQL Server

Every day a PPE.txt file with clients data, separated by semicolon and always with the same layout is stored to a specific file directory. 每天,带有客户数据的PPE.txt文件(用分号分隔,并且始终具有相同的布局)存储在特定的文件目录中。

Every day someone has to update a specific table from our database based in this PPE.txt . 每天都有人必须根据此PPE.txt从我们的数据库中更新特定的表。

I want to automate this process via a SQL script 我想通过SQL脚本自动执行此过程

What I thought would be a solution is to import the data via a script from this .txt file into a created table, then execute the update. 我认为一种解决方案是通过脚本从此.txt文件将数据导入到创建的表中,然后执行更新。

What I have so far is 我到目前为止所拥有的是

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'

I know I haven't given much, but it is because I don't have much yet. 我知道我没有付出太多,但这是因为我还没有太多。

I want to populate the CX_PEPList_TMP temp table with the data from the PEP.txt file via a script so I could just execute this script to update my database. 我想通过脚本使用来自PEP.txt文件的数据填充CX_PEPList_TMP临时表,因此我只需执行此脚本即可更新数据库。 But I don't know any kind of command I can use neither have found in my research. 但是我不知道我在研究中找不到任何一种命令。

Thanks in advance! 提前致谢!

Using OPENROWSET 使用OPENROWSET

You can read text files using OPENROWSET option (first you have to enable adhoc queries) 您可以使用OPENROWSET选项读取文本文件(首先必须启用临时查询)

Using Microsoft Text Driver 使用Microsoft文本驱动程序

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

Using OLEDB provider 使用OLEDB提供程序

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

Using BULK INSERT 使用批量插入

You can import text file data to a staging table and update data from it: 您可以将文本文件数据导入登台表并从中更新数据:

BULK INSERT dbo.StagingTable
FROM 'C:\PPE.txt'
WITH 
  (
    FIELDTERMINATOR = ';', 
    ROWTERMINATOR = '\n' 
  )

在您的情况下,我建议您使用像SSIS这样的ETL ,这种ETL更好SSIS易于使用,并且您还可以Schedule包在特定时间执行

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM