从Excel运行SQL Server存储过程

时间:2014-02-05 15:15:30

标签: sql sql-server excel vba excel-vba

我一直在使用这个http://mikesknowledgebase.com/pages/SQLServer/RunStoredProcedureFromExcel.htm作为框架来尝试从VBA运行存储过程,以便将数据直接提取到Excel工作表中。到目前为止,我的问题是应该连接到SQL Server的行。

我目前有这个:

con.Open "Provider=SQLOLEDB;Data Source=domain\serverName;Initial Catalog=databaseName;Integrated Security=SSPI;Trusted_Connection=Yes;"

但是这给了我一个错误,表明它不存在,或访问被拒绝。我一直在努力寻找一个更好的例子,它实际上显示了我将如何连接到SQL Server,但却找不到任何东西。我错过了一些明显的东西吗是否有另一种方法连接到SQL Server以运行存储过程?

除此之外,从查看代码我不确定存储过程的参数是如何被存储过程读取的。例如,我有两个参数@endDate@beginDate

我有这个:

cmd.Parameters.Append cmd.CreateParameter("@beginDate", adDate, adParamInput, 10, Range("J3").Text)
cmd.Parameters.Append cmd.CreateParameter("@endDate", adDate, adParamInput, 10, Range("J4").Text)

但是他们没有在其他任何地方使用过。是否只需要连接excel的输入和存储过程中的参数?我只是想了解它是如何工作的。

编辑:我的语法对于数据库是错误的,需要更多信息。我的新问题是,在创建参数时,我收到错误

  

应用程序使用错误类型的值进行当前操作。

我在想这是因为我正在尝试将文字转换为日期,最好将其存储为varchar?它们都需要与SQL Server中的datetime列匹配。

Edit2:显然我错了,因为参数现在正常工作。不知道为什么不是,但现在确实如此。

1 个答案:

答案 0 :(得分:0)

当我尝试做同样的事情时,我发现这个网站非常有帮助。 Running a SQL Stored Procedure from Excel with Dynamic Parameters

VBA代码看起来像这样;使用友好名称,您将查询分配为“Query1”,您将为Range输入参数的单元格。

Sub RefreshQuery()
    With ActiveWorkbook.Connections("Query1").OLEDBConnection
        .CommandText = "EXECUTE dbo.StoredProcedureName '" & _
        Sheets("Parmeters").Range("J3").Value & "','" & _
        Sheets("Parmeters").Range("J4").Value & "'"
    End With
    ActiveWorkbook.Connections("Query1").Refresh
End Sub

如果您在存储过程中使用临时表,请确保在开头包含'SET NOCOUNT ON',并在sp结尾处包含'SET NOCOUNT OFF'。