Передача значений запросов Dynami c из Excel в SQL Подключение к серверу (ошибка создания хранимой процедуры) - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь выполнить динамический c sql запрос, используя Excel, чтобы получить список кодов, которые являются моими переменными в запросе.

В настоящее время я пытаюсь сохранить мой SQL процедура для вызова позже, но я получаю ошибку. Я очень новичок в этом, поэтому я даже не уверен, что делаю это в нужном месте. Для начала я открыл visual basi c, а затем перешел к Вставка > Процедура . На этом экране у меня есть следующее:

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. В основном я пытаюсь вызвать эту процедуру, а затем заполнить '@code_list' набором данных, который уже находится в Excel. Надеюсь, это имеет смысл для кого-то, поскольку я искал inte rnet везде, и, похоже, ничто не помогает. Я мог быть совершенно не в курсе того, что я пытаюсь сделать. Дайте мне знать, если вам нужны дополнительные разъяснения.

Спасибо!

1 Ответ

0 голосов
/ 08 апреля 2020

Я бы так поступил.

' 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/

...