将动态查询值从Excel传递到SQL Server连接(创建存储过程错误)

时间:2020-04-07 16:31:18

标签: sql sql-server excel vba procedure

我正在尝试使用excel运行动态sql查询,以提取代码列表,这些代码是查询中的变量。

我当前正在尝试存储我的SQL过程以供以后调用,但出现错误。我对此很陌生,因此甚至不确定是否在正确的位置进行此操作。首先,我打开了 Visual Basic ,然后转到插入> 过程。在该屏幕中,我有以下内容:

CREATE PROCEDURE society_detail  
Dim code_list  
AS  
BEGIN  
SET NOCOUNT ON;

SELECT DISTINCT client_code , client_name, security_code 
FROM Connection1.table_1  
WHERE client_code in (@code_list) 
ORDER BY client_code

End

作为参考,Connection1是我的SQL连接,该连接已建立并正确连接。当我尝试与此过程建立连接时,出现错误消息“编译错误:预期:语句结束”,并且突出了society_detail。基本上,我试图调用此过程,然后用已经在excel中的数据集填充“ @code_list”。希望这对某人有意义,因为我到处都在搜索互联网,并且似乎没有任何帮助。我可能完全不做我想做的事情。让我知道是否需要更多说明。

谢谢!

1 个答案:

答案 0 :(得分:0)

这就是我要做这种事情的方式。

' Set a Reference: Microsoft ActiveX Data Objects 2.8 Library
Sub Working()

Dim con As Connection
Dim rst As Recordset
Dim strConn As String

Set con = New Connection
strConn = "Provider=SQLOLEDB;"
strConn = strConn & "Data Source=Your_server_name;"
strConn = strConn & "Initial Catalog=Your_DB_Name;"
strConn = strConn & "Integrated Security=SSPI;"

con.Open strConn

'Put a country name in Cell E1
Set rst = con.Execute("Exec dbo.MyOrders @BeginDate = " & "'" & ActiveSheet.Range("E1").Text & "'," & "@EndDate = '" & ActiveSheet.Range("E2").Text & "'")
ActiveSheet.Range("A1").CopyFromRecordset rst

rst.Close
con.Close

End Sub

我的工作表如下。

enter image description here

这肯定可以。当然,还有其他方法可以做同样的事情。我会留给您发现其他类似的选项。

参考:

https://www.mssqltips.com/sqlservertip/3436/passing-dynamic-query-values-from-excel-to-sql-server/