SQL Server 2008 - 从.txt或.csv插入特定列

时间:2014-12-23 16:59:43

标签: sql-server sql-server-2008

我试图从.txt文件插入(或.csv会更好!)但我希望能够从.txt(或.csv文件)中选择特定的列,例如#1#列#2 #5#10等。

这可能吗?

下面的MSSQL将插入整个内容并要求插入数据库中匹配的字段数。

BULK
INSERT TableName
FROM 'C:\Users\User\Desktop\test.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO

以下是.csv中一行数据的示例: -

"1A","SOUTH BANK UNIVERSITY","","","","103","","BOROUGH ROAD","","","","LONDON","","SURREY","SOUTHWARK","1","L","38026","SE1 0AA","53180","17940","BEGE","Q71","08Q  ","064"

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

您可以使用OPENROWSET
您需要安装Microsoft.ACE.OLDB.xx.0提供程序。 (我服务器上的xx = 15.0或12.0)

如果您的文件没有列名:

SELECT F1, F2, F5, F10
FROM OPENROWSET (
'Microsoft.ACE.OLEDB.15.0', 
'Text;Database=C:\Projects\data;Extended Properties="HDR=No;IMEX=1"',
'SELECT * FROM data.txt') a

如果您的文件具有列名(指定列的名称)

SELECT Column1, Column2, Column5, Column10
FROM OPENROWSET (
'Microsoft.ACE.OLEDB.15.0', 
'Text;Database=C:\Projects\data;Extended Properties="HDR=Yes;IMEX=1"',
'SELECT * FROM data.txt') a

您需要使用sp_configure

启用“Ad Hoc Distributed Queries”
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO

您还可能必须在提供程序属性下“允许进行中”。 (服务器对象|链接服务器|提供商)

希望有所帮助。

答案 1 :(得分:0)

如果将数据保存为csv或excel格式,则可以使用SQL Server Management Studio功能通过向导而不是使用命令从工作表导入数据。

要访问此功能,请右键单击您的数据库,然后单击任务 - >导入数据。如果要使用.txt / .csv文件,请在下一页上选择“平面文件源”。如果要将csv另存为Excel文件并选择导入,请选择Excel。

从那里按照向导。您可以将列导入新表或现有表。

考虑一下,将csv文件保存到Excel中可能更容易,然后只需手动删除导入前不需要的列。