如何从 .txt 文件导入数据以在 SQL 服务器中填充 table
How to import data from .txt file to populate a table in SQL Server
每天都有一个 PPE.txt
包含客户数据的文件,以分号分隔且始终具有相同的布局,并存储到特定的文件目录中。
每天有人必须根据此 PPE.txt
.
从我们的数据库中更新特定的 table
我想通过 SQL 脚本自动执行此过程
我认为一个解决方案是通过脚本将数据从这个 .txt
文件导入到创建的 table,然后执行更新。
我目前所掌握的是
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'
我知道我没有付出太多,但那是因为我还没有太多。
我想通过脚本用 PEP.txt
文件中的数据填充 CX_PEPList_TMP
temp table,这样我就可以执行这个脚本来更新我的数据库。但是我不知道我可以使用的任何命令,在我的研究中也没有找到。
提前致谢!
使用 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
使用批量插入
您可以将文本文件数据导入暂存 table 并从中更新数据:
BULK INSERT dbo.StagingTable
FROM 'C:\PPE.txt'
WITH
(
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n'
)
在你的情况下,我建议你使用像 SSIS
这样的 ETL
它更好也更容易使用,你也可以 Schedule
包在特定的环境中执行时间
每天都有一个 PPE.txt
包含客户数据的文件,以分号分隔且始终具有相同的布局,并存储到特定的文件目录中。
每天有人必须根据此 PPE.txt
.
我想通过 SQL 脚本自动执行此过程
我认为一个解决方案是通过脚本将数据从这个 .txt
文件导入到创建的 table,然后执行更新。
我目前所掌握的是
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'
我知道我没有付出太多,但那是因为我还没有太多。
我想通过脚本用 PEP.txt
文件中的数据填充 CX_PEPList_TMP
temp table,这样我就可以执行这个脚本来更新我的数据库。但是我不知道我可以使用的任何命令,在我的研究中也没有找到。
提前致谢!
使用 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
使用批量插入
您可以将文本文件数据导入暂存 table 并从中更新数据:
BULK INSERT dbo.StagingTable
FROM 'C:\PPE.txt'
WITH
(
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n'
)
在你的情况下,我建议你使用像 SSIS
这样的 ETL
它更好也更容易使用,你也可以 Schedule
包在特定的环境中执行时间