【问题标题】:How do I execute a sql script from excel using VBA如何使用 VBA 从 excel 执行 sql 脚本
【发布时间】:2019-08-01 02:45:41
【问题描述】:

我希望有可以运行 .sql 脚本(保存在文件夹中)的宏,而不必将 SQL 代码放入 Excel VBA 脚本中。

我有超过 50 个脚本要自动化 - 每个脚本都有很多查询,每个查询用 ; 分隔。

我试过了

db.ExecuteImmediate ("\\c\sql_folder\1.0_Create_My Lovely_Table.sql") 

但错误提示“需要对象”

下面的代码有效,但我需要帮助来完成上述操作。谢谢。

Sub CREATE_My_lovely_table()
Dim con As ADODB.Connection
Dim recset As ADODB.Recordset
Dim ConnectionString As String
Dim SQL_String As String

Set con = New ADODB.Connection
Set recset = New ADODB.Recordset

ConnectionString = "xxxxxx.1;User ID=XXXX_XXXX_XXXX;password=xxxxxxxx;Data Source=xxxxxxxx"

con.Open ConnectionString

SQL_String = "CREATE TABLE My_lovely_table (CASEID NUMBER,ACCOUNTNUMBER NUMBER,RESOLVEDDATE TIMESTAMP,RESOLUTION VARCHAR (50),RESOLVEDBY VARCHAR (100),ORDERID NUMBER)"
recset.Open SQL_String, con
    con.Close
End Sub

【问题讨论】:

  • 您可以将文本加载到字符串中并执行。对于不返回记录的查询,您可以使用[Connection Object].Execute

标签: excel vba


【解决方案1】:

您可以尝试从 VBA 执行 SQL 存储过程。我可以想象它与执行 SQL 查询没有太大区别。

Set mobjConn = New ADODB.Connection
mobjConn.Open "your connection string"
Set mobjCmd = New ADODB.Command
With mobjCmd
    .ActiveConnection = Me.Connection
    .CommandText = "your stored procedure"
    .CommandType = adCmdStoredProc
    .CommandTimeout = 0
    .Parameters.Append .CreateParameter("your parameter name", adInteger, adParamInput, , your parameter value)
    ' repeat as many times as you have parameters

    .Execute
End With

发现于傻萝卜Calling stored procedure VBA

另一个选项可能是将字符串(SQL 查询)存储在文本文件中并将它们加载到 VBA 数组中并执行它们。

【讨论】:

    【解决方案2】:

    非常感谢您的回复。我正在解决它:

    Sub Run_my_sql()
    Dim con As ADODB.Connection
    Dim ConnectionString As String
    Dim SQL_Commands As Variant
    Dim SQL_String As Variant
    Dim strFilename As String: strFilename = "C:\folder_name\my_sql_file.sql"
    Dim iFile As Integer: iFile = FreeFile
    
    Set con = New ADODB.Connection
    Set recset = New ADODB.Recordset
    
    ConnectionString = "xxxx.1;User ID=xxx_xxxxx_xxxx;password=xxxxxxxx;Data Source=xxxxxxx"
    
    con.Open ConnectionString
    
    
    Open strFilename For Input As #iFile
    SQL_String = Input(LOF(iFile), iFile)
    Close #iFile
    
    SQL_Commands = Split(SQL_String, ";")
    For Each SQL_String In SQL_Commands
        con.Execute SQL_String
    Next SQL_String
    
    con.Close
    End Sub
    

    目前。

    【讨论】:

      【解决方案3】:

      您可以下载 SQL Server 的“sqlcmd”实用程序 (阅读更多https://docs.microsoft.com/en-us/sql/tools/sqlcmd-utility?view=sql-server-2017

      有了它,您可以从命令行运行 *.sql 脚本...

      然后,在您的 VBA 代码中,您可以使用 Shell 过程

      current_query = Shell("sqlcmd -S <server Name> -U sa -P sapassword -i inputquery_file_name -o outputfile_name")

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        • 2023-03-20
        • 2012-03-20
        • 1970-01-01
        • 1970-01-01
        • 2010-11-30
        相关资源
        最近更新 更多