Sql server 从Excel工作表将数据插入SQL表
如果SQL中有下表Sql server 从Excel工作表将数据插入SQL表,sql-server,tsql,Sql Server,Tsql,如果SQL中有下表 Item Desc Type Location Quantity Unit_Price A AAA X 1 0 20.00 B BBB Y 2 0 10.00 B CCC X 2 0 50.00 C DDD Z 1
Item Desc Type Location Quantity Unit_Price
A AAA X 1 0 20.00
B BBB Y 2 0 10.00
B CCC X 2 0 50.00
C DDD Z 1 0 150.00
C EEE Y 3 0 70.00
D FFF Z 3 0 65.00
和下面的Excel表格
Item Location Quantity
A 1 1
B 1 2
B 2 3
C 1 40
C 3 500
D 3 10
如何将这些数量插入到从Excel表读取的SQL表中?SQL Server Management Studio可以通过其导入/导出功能完成此操作。我通常使用SSM来完成这项工作
在SSMS中,右键单击数据库,然后选择任务|导入数据。首先需要将Excel工作表导入数据库。然后使用查询更新表。您可以使用 首先将数据从excel导入一个临时表(它将创建新表,您可以稍后删除该表) 一旦在表中有了数据,就可以更新现有的数据
是一种简单的分步方法要使用T-SQL实现这一点,您可以详细了解这一点,并从将数据拉入临时表开始,如下面的
SELECT…into
语句所示:
SELECT * INTO #ProductInfo
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0 Xml; HDR=YES; IMEX=1;
Database=C:\DataFiles\ProductData.xlsx',
[vProduct$]);
使用内置函数检索Excel数据,其中第一个参数是提供程序的名称,可以是两个提供程序之一:
- Microsoft.Jet.OLEDB.4.0:用于SQL Server 32位版本的Excel 2003文件(或更早版本)李>
- Microsoft.ACE.OLEDB.12.0:在SQL Server上使用 Excel 2007文件(或更高版本)或SQL Server上的32位版本 适用于任何Excel文件的64位版本
OPENROWSET
参数定义由分号分隔的提供程序字符串,第一部分指定文件类型:
- 对于Excel'97-2003(.xls)文件,请使用Excel 8.0
- 对于Excel 2007-2010(.xlsx)文件,请使用Excel 12.0 Xml
- 对于启用Excel 2007-2010宏的(.xlsm)文件,请使用Excel 12.0 宏
- 对于Excel 2007-2010非XML二进制(.xlsb)文件,请使用Excel 12.0
#ProductInfo
后,可以根据需要使用内部联接转换、过滤数据,然后更新数量字段:
UPDATE
p
SET
p.Quantity = temp.Quantity
FROM dbo.Product AS p
INNER JOIN #ProductInfo AS temp
ON temp.Item = p.Item
AND temp.Location = p.Location;
右键单击数据库->任务->导入数据->向导将打开 单击“下一步”(源向导将打开),并在“数据源”下拉列表中选择“Microsoft Excel”选项,然后选择Excel路径,然后单击“下一步”按钮(Excel列和表列应相同,否则不会插入) 在向导中输入目的地详细信息,单击下一步 单击“下一步”按钮 单击“下一步”按钮并完成 试试这个
Option Explicit
Public CN As ADODB.Connection
Dim Cod_Prod, Nombre, Existencia
Dim Fila, Final As Integer
Function Connect(Server As String, User As String, Pass As String, Database As String) As Boolean
Set CN = New ADODB.Connection
On Error Resume Next
With CN
.ConnectionString = "Provider=SQLOLEDB.1;" & _
"Password=" & Pass & ";" & _
"Persist Security Info=True;" & _
"User ID=" & User & ";" & _
"Initial Catalog=" & Database & ";" & _
"Data Source=" & Server
.Open
End With
If CN.State = 0 Then
Connect = False
Else
Connect = True
End If
End Function
Function Query()
Dim SQL As String
Dim RS As ADODB.Recordset
Dim Field As ADODB.Field
Dim Col As Long
Set RS = New ADODB.Recordset
Final = GetUltimoR(Hoja1)
For Fila = 2 To Final
Cod_Prod = Hoja1.Cells(Fila, 2)
Nombre = Hoja1.Cells(Fila, 3)
Existencia = Hoja1.Cells(Fila, 4)
SQL = "insert into productos values('" & Cod_Prod & "','" & Nombre & "'," & Existencia & ");"
RS.Open SQL, CN
Next
RS.Open "SELECT * FROM PRODUCTOS", CN
If RS.State Then
Col = 1
For Each Field In RS.Fields
Cells(1, Col) = Field.Name
Col = Col + 1
Next Field
Cells(2, 1).CopyFromRecordset RS
Set RS = Nothing
End If
End Function
Function Disconnect()
CN.Close
End Function
Public Sub run()
Dim SQL As String
Dim Connected As Boolean
Connected = Connect("192.168.0.12", "usuario1", "12345", "inventario")
If Connected Then
Call Query
Call Disconnect
Else
MsgBox "No podemos Conectarnos!"
End If
End Sub
Public Function GetUltimoR(Hoja As Worksheet) As Integer
GetUltimoR = GetNuevoR(Hoja) - 1
End Function
Public Function GetNuevoR(Hoja As Worksheet) As Integer
Dim Fila As Integer
Fila = 2
Do While Hoja.Cells(Fila, 2) <> ""
Fila = Fila + 1
Loop
GetNuevoR = Fila
End Function
选项显式
公共CN作为ADODB.Connection
暗鳕鱼产品,名称,存在
Dim Fila,最终为整数
函数连接(服务器作为字符串,用户作为字符串,传递作为字符串,数据库作为字符串)为布尔值
Set CN=New ADODB.Connection
出错时继续下一步
与CN
.ConnectionString=“Provider=SQLOLEDB.1;”和_
“Password=“&Pass&”;”和_
“Persist Security Info=True;”_
“用户ID=”&User&“;”&_
“初始目录=”&数据库&“;”&_
“数据源=”&服务器
打开
以
如果CN.State=0,则
Connect=False
其他的
Connect=True
如果结束
端函数
函数查询()
将SQL设置为字符串
将RS设置为ADODB.Recordset
作为ADODB.Field的Dim字段
暗色如长
Set RS=New ADODB.Recordset
最终=GetUltimoR(Hoja1)
对于Fila=2到最终
Cod_Prod=Hoja1.细胞(Fila,2)
Nombre=Hoja1.细胞(Fila,3)
存在性=Hoja1.细胞(Fila,4)
SQL=“插入到productos值(“&Cod_Prod&”、“&Nombre&”、“&Existencia&”)中
开放式SQL,中国
下一个
RS.打开“从PRODUCTOS中选择*”,中国
如果是美国,那么
Col=1
对于RS.字段中的每个字段
单元格(1,列)=字段名称
Col=Col+1
下一场
单元格(2,1)。复制自记录集RS
设置RS=无
如果结束
端函数
功能断开()
CN.Close
端函数
公共子运行()
将SQL设置为字符串
作为布尔连接
已连接=连接(“192.168.0.12”、“通常为1”、“12345”、“发明”)
如果连接,则
呼叫查询
呼叫中断
其他的
MsgBox“没有podemos Conectarnos!”
如果结束
端接头
公共函数GetUltimoR(Hoja作为工作表)作为整数
GetUltimoR=GetNuevoR(Hoja)-1
端函数
公共函数GetNuevoR(Hoja作为工作表)作为整数
作为整数的Dim Fila
Fila=2
当Hoja.Cells(Fila,2)”时执行
菲拉=菲拉+1
环
GetNuevoR=Fila
端函数
通过创建新表?是。将Excel工作表导入到新表中。然后使用查询更新实际表。类似于这样的内容:更新T1集合T1.Quantity=Te.Quantity FROM Table1 T1内部联接Excel Te on Te.Item=T1.Ítem和Te.Location=T1.Location我需要在SQL中创建Excel表作为新表?您也可以选择将Excel数据导入现有表。只需指定要导入的表。