使用存储过程将数据从 SQL 表插入 Excel

Posted

技术标签:

【中文标题】使用存储过程将数据从 SQL 表插入 Excel【英文标题】:Insert Data to Excel from SQL Table using a Stored Procedure 【发布时间】:2016-12-08 13:16:43 【问题描述】:

我想每天 工作表。它必须删除excel中的数据并将新数据插入到同一张表中。

我该怎么做?

这段代码有错误

Sub Connecion()

' Create a connection object.
Dim cnPubs As ADODB.Connection
Set cnPubs = New ADODB.Connection

' Provide the connection string.
Dim strConn As String

'Use the SQL Server OLE DB Provider.
strConn = "PROVIDER=SQLOLEDB;"

'Connect to the Pubs database on the local server.
strConn = strConn & "DATA SOURCE=(10.200.157.110);INITIAL CATALOG=Brickstream_DEVMGR;"

'Use an integrated login.
strConn = strConn & " INTEGRATED SECURITY=sspi;"

'Now open the connection.
cnPubs.Open strConn



End Sub

【问题讨论】:

到目前为止你尝试过什么?最简单的方法 (IMO) 是创建数据连接并完全跳过使用 VBA。 基本上您的问题是如何进行连接,因为 SQL 将是相同的,到目前为止您有什么? 我正在添加我的 VBA 代码以打开连接,但出现错误 第一个建议:去掉IP地址两边的括号 @SemihUral,您不需要为它创建代码。只需在 excel 中使用 QueryTables.Add,它就会与可以随时刷新的数据建立实时连接。您可以通过编程方式或使用 excel 本身(Data\From other sources\From SQL server 并填写信息)来执行此操作。 【参考方案1】:

以下代码对我有用

Sub GetDataFromADO()
    'Declare variables'
        Set objMyConn = New ADODB.Connection
        Set objMyRecordset = New ADODB.Recordset
        Dim strSQL As String

    'Open Connection'
        objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=10.200.157.110;Initial Catalog=Brickstream_DEVMGR;User ID=usr_bayi;Password=3Ay1usr;"
        objMyConn.Open

    'Set and Excecute SQL Command'
        strSQL = "select * from DEALER_DETAILED"

    'Open Recordset'
        Set objMyRecordset.ActiveConnection = objMyConn
        objMyRecordset.Open strSQL

    'Copy Data to Excel'
        ActiveSheet.Range("A2").CopyFromRecordset (objMyRecordset)

End Sub

【讨论】:

【参考方案2】:

简单问一下。

Sub ADOExcelSQLServer()

    Dim Cn As ADODB.Connection
    Dim Server_Name As String
    Dim Database_Name As String
    Dim User_ID As String
    Dim Password As String
    Dim SQLStr As String
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset

    Server_Name = "your_server_name" ' Enter your server name here
    Database_Name = "Northwind" ' Enter your  database name here
    User_ID = "" ' enter your user ID here
    Password = "" ' Enter your password here
    SQLStr = "SELECT * FROM Orders" ' Enter your SQL here

    Set Cn = New ADODB.Connection
    Cn.Open "Driver=SQL Server;Server=" & Server_Name & ";Database=" & Database_Name & _
    ";Uid=" & User_ID & ";Pwd=" & Password & ";"

    rs.Open SQLStr, Cn, adOpenStatic

    With Worksheets("Sheet1").Range("A2:Z500")
        .ClearContents
        .CopyFromRecordset rs
    End With

    rs.Close
    Set rs = Nothing
    Cn.Close
    Set Cn = Nothing
End Sub

【讨论】:

以上是关于使用存储过程将数据从 SQL 表插入 Excel的主要内容,如果未能解决你的问题,请参考以下文章

SQL/C#:DataTable 到存储过程(从用户定义的表类型插入)- 转换错误

使用存储过程将数据插入从其他表派生的表中

将数据从 MS Sql Server 存储过程导出到 excel 文件

将 Select Query (SQL Server) 的结果保存到 Excel 的工作表中

将数据从excel插入sql表

使用存储过程(SQL + C#)将数据插入一个表,然后将多行插入另一个表