使用OPENROWSET将文本文件插入数据库

时间:2012-12-19 08:31:41

标签: sql-server tsql alias openrowset

我有一堆文本文件,其中的电话号码由回车符分隔。我知道这些都是数字。我想将所有这些数字插入到我的SQL数据库中的表中。但问题是文本文件以第一个数字开头;不是列名。这意味着每次我尝试插入数据时都不知道列名。

为了澄清这一点,我向您展示了我写的SQL:

INSERT into dbo.IranCellPhoneNumbers
SELECT PostalCode = null, mobile as Number,CityId= 20
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Text;Database=D:\Projects\Sepanta\ExcelImporter\ExcelImporter\bin\Debug\k1\,
'SELECT * FROM etebari.txt') 

我将postalCode设置为null,因为我希望表定义匹配。并设置CityId硬编码,因为我知道我的意思是哪个城市。但问题是数字列..它不匹配,因为文本文件以数字而不是“移动”列名开头。

如果我希望此代码有效,那么在插入之前我必须打开这些文本文件并在列表顶部添加“mobile”,这是不可取的。

你有什么建议?

2 个答案:

答案 0 :(得分:1)

尝试使用类似于此处评论的内容

http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/cfbe56cc-70b7-462a-b106-0dd9a33304eb

即。这些方面的东西:

"Text;Database=D:\Projects\Sepanta\ExcelImporter\ExcelImporter\bin\Debug\k1\;Extended Properties="Excel 12.0;HDR=No"

此处有更多样本:

http://www.codeproject.com/Articles/37055/Working-with-MS-Excel-xls-xlsx-Using-MDAC-and-Oled

或运行此DOS命令以自动添加标题:

COPY HEADERFILE.TXT + YourFile.TXT OUTPUTFILE.TXT

其中HEADERFILE.TXT包含标题和回车

并且通常不具备国家特定表格的表格设计,但这是另一个故事。

答案 1 :(得分:0)

您不需要列名。就这样做:

INSERT into dbo.IranCellPhoneNumbers
SELECT PostalCode = null, *, CityId= 20
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Text;Database=D:\Projects\Sepanta\ExcelImporter\ExcelImporter\bin\Debug\k1\;HDR=NO',
'SELECT * FROM etebari.txt') 
相关问题