将 Excel 单元格值插入现有 SQL 表 [重复]
Posted
技术标签:
【中文标题】将 Excel 单元格值插入现有 SQL 表 [重复]【英文标题】:Insert Excel Cell values into an existing SQL table [duplicate] 【发布时间】:2011-12-08 14:43:25 【问题描述】:可能重复:Excel VBA INSERT INTO statement using variables
我刚刚开始学习一点 VBA,我已经成功地从 SQL Server 中创建的数据库导入数据,现在我正在尝试将数据从 Excel 导出到同一个数据库。
以下工作正常:
Dim cnState As ADODB.Connection
Dim sSQL As String
Set cnState = New Connection
With cnState
.Provider = "SQLOLEDB"
.ConnectionString = "server=.\SQLEXPRESS; Trusted_Connection=Yes; database=SIM_PROJ"
.Open
End With
sSQL = "Insert Into Alunos Values ('3', 'Tiago Aleixo', 'Rua dos Pincéis' , '1990-05-26' , 'M' , 'Multimédia' , 'D')"
cnState.Execute sSQL
End Sub
Private Sub btn_goMenu_Click()
Sheet1.Select
唯一的问题是,我只设法弄清楚如何通过代码插入实际值,我希望能够在 Excel 中读取整行并将其插入到我的数据库中。
类似这样的:
sSQL = "Insert Into Alunos Values (Range(A4).Value, Range(B4).Value, Range(C4).Value, Range(D4).Value, Range(E4).Value, Range(F4).Value, Range(G4).Value)"
IE,我只想插入第 4 行的值。
【问题讨论】:
【参考方案1】:可能您必须更增量地构建字符串,例如:
SQL = "INSERT INTO alunos VALUES ('" + Range(A4).Value + "', '" + Range(A5).Value + "', '"...
您显示的语法看起来就像它会尝试将字符串“Range(A4).Value”插入到数据库中。
【讨论】:
我尝试了以下方法:sSQL = "Insert Into Alunos Values ('" + Range("A3").Value + "' , '" + Range("B3").Value + "' , '" + Range("C3").Value + "' , '" + Range("D3").Value + "' , '" + Range("E3").Value + "' , '" + Range("F3").Value + "' , '" + Range("G3").Value + "')"
但是得到一个:类型不匹配错误,这可能是因为我试图在数据库中插入一个日期吗?...
是的,这似乎很可能。尝试只做几列作为测试,这些列只是普通的旧数字或字符串。 Excel 将日期存储为整数。我不确定你如何通过 VBA 调用常规的 excel 功能,但是如果你尝试 TEXT(Range(A3),"yyyy-mm-dd") 之类的东西,看看你会得到什么。您希望它创建一个 SQL Server 将接受作为日期的字符串,我认为这可能与您的语言环境有关,但 yyyy-mm-dd 看起来与您的示例匹配。
Here's a link 关于从 excel 调用工作表函数(如 TEXT)。【参考方案2】:
将您的文件保存为逗号分隔的 CSV 文件,然后您可以使用如下批量插入。
declare @sql varchar(max)
set @sql = "BULK INSERT Alunos FROM '"+@File+"' WITH (FIELDTERMINATOR = ',') "
exec (@sql)
【讨论】:
以上是关于将 Excel 单元格值插入现有 SQL 表 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
将单元格值从 Excel 拉入 Word(运行时错误 429)
如何将 Excel 单元格值设置为 Access Query 的条件?