我一直在使用这个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:显然我错了,因为参数现在正常工作。不知道为什么不是,但现在确实如此。
答案 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'。