0

我有一堆文本文件,它们的电话号码用回车符分隔。我知道这些都是数字。我想将所有这些数字插入到我的 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 硬编码,因为我知道我的意思是哪个城市。但问题是数字列..它不匹配,因为文本文件以数字而不是“移动”列名开头。

如果我想让这段代码工作,在插入之前我必须打开这些文本文件并在列表顶部添加“移动”,这是不可取的。

你有什么建议?

4

2 回答 2

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 包含标题和回车符

拥有特定国家/地区的表格通常不是好的表格设计,但那是另一回事。

于 2012-12-19T08:48:26.083 回答
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') 
于 2012-12-19T09:37:23.290 回答