Передача значений динамического запроса из Excel в SQL Server Подключение (создание ошибки хранимой процедуры)

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

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

Спасибо!


person Matthew    schedule 07.04.2020    source источник
comment
Процедура - это не тот тип процедуры. Вам нужно посмотреть на наборы записей и соединения, чтобы делать то, что вам нужно. Объект подключения, тогда набор записей будет recordset=connection.execute "exec society_detail" Я добавлю хорошую ссылку сейчас   -  person Nathan_Sav    schedule 07.04.2020
comment
stackoverflow.com/questions/31986552/   -  person Nathan_Sav    schedule 07.04.2020


Ответы (1)


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

' 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

Мой рабочий лист выглядит так.

введите здесь описание изображения

Это определенно сработает. Конечно, есть и другие способы сделать то же самое. Я оставлю это на ваше усмотрение, чтобы открыть другие, похожие варианты.

Ссылка:

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

person ASH    schedule 08.04.2020