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

时间:2019-03-26 22:05:37

标签: sql sql-server tsql

每天将带有客户数据的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 个答案:

答案 0 :(得分:2)

使用OPENROWSET

您可以使用 OPENROWSET 选项(首先必须启用临时查询)

来阅读文本文件。

使用Microsoft文本驱动程序

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 dbo.StagingTable
FROM 'C:\PPE.txt'
WITH 
  (
    FIELDTERMINATOR = ';', 
    ROWTERMINATOR = '\n' 
  )

答案 1 :(得分:1)

对于您而言,我建议您使用ETL之类的SSIS更好,更轻松地使用它,也可以Schedule在特定的时间执行该程序包< / p>