将 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 的条件?

Excel:使用单元格值作为 SQL 查询的参数

Excel 根据单元格值复制到特定工作表

(Excel) 引用另一个工作表中的单元格时,我可以将工作表名称作为单元格值传递吗?

是否可以使用 excel 单元格值 - 作为 T-SQL 语句中的参考?