SQL Server 将数据从Excel工作表插入SQL表

utugiqy6  于 2022-12-03  发布在  其他
关注(0)|答案(7)|浏览(209)

如果我在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表中?

um6iljoc

um6iljoc1#

若要使用T-SQL执行这项作业,您可以详细遵循这个tutorial,并从将数据拉入缓存数据表开始,如下列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$]);

使用OPENROWSET内置函数检索Excel数据,其中第一个参数是提供程序的名称,可以是以下两个提供程序之一:

  • 微软Jet.OLEDB.4.0:在SQL Server 32位版本上用于Excel 2003文件(或更早版本)。
  • 您可以在此查看更多信息。在SQL Server 32位版本上用于Excel 2007文件(或更高版本),或在SQL Server 64位版本上用于任何Excel文件。

第二个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后,可以根据需要使用内部联接转换和过滤数据,然后更新Quantity字段:

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;
js4nwp54

js4nwp542#

右键单击数据库-〉任务-〉导入数据-〉向导将打开x1c 0d1x
单击“下一步”(源向导将打开),在“数据源”下拉列表中选择“Microsoft Excel”选项,然后选择Excel路径,单击“下一步”按钮(Excel列和表列应相同,否则将不会插入)。

在向导中输入目标详细信息,然后单击“下一步”

单击“下一步”按钮

x1c4d 1x指令集
单击“下一步”按钮并完成

sycxhyv7

sycxhyv73#

SQL Server Management Studio可以通过其导入/导出功能来完成此操作。我经常使用SSMS来完成此操作。
在SSMS中,右键单击数据库,然后选择“任务|汇入数据。

67up9zun

67up9zun4#

首先需要将Excel工作表导入数据库。然后使用查询更新表。

ulmd4ohb

ulmd4ohb5#

您可以使用SQL Server Import and Export Wizard
首先将数据从excel导入到临时表中(它将创建新表,您可以稍后删除)
在表中拥有数据后,就可以更新现有的表
Here是一种简单的逐步方法

hlswsv35

hlswsv356#

试试这个

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
cgfeq70w

cgfeq70w7#

BULK INSERT [Trading].[dbo].[tmp_mst_bhavcopy]
     FROM   'E:\Text\bhavcopy.csv' 
     WITH (
              FIELDTERMINATOR=',',
              ROWTERMINATOR = '0x0a',
              firstrow=2
           )

相关问题