Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从Excel工作表将数据插入SQL表_Sql Server_Tsql - Fatal编程技术网

Sql server 从Excel工作表将数据插入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

如果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           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
参数的第二部分指定文件的路径和文件名。第三个参数是我们希望访问的电子表格的名称,其中附加了美元符号($)并将其括在括号中,例如在[Products$]中

将数据放入临时表
#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数据导入现有表。只需指定要导入的表。