Использование параметров в запросе SQL с подзапросом - PullRequest
3 голосов
/ 28 января 2011

У меня довольно сложный SQL-запрос с вложенным подзапросом.Когда я пытаюсь использовать параметры в Microsoft Query, я говорю, что могу использовать параметры в запросах, которые не могут быть представлены графически.Поэтому мне нужен еще один вариант.Я думаю, что вы можете поместить свой SQL-запрос в ячейку в виде строки, а затем запустить его в макросе.Любые идеи, как я мог бы сделать это?

Спасибо

-Джесс

Ответы [ 3 ]

1 голос
/ 28 января 2011

Вот что я делаю, чтобы обойти ограничения Microsoft Query в Excel 2007:

  1. A создаст фиктивный запрос (например, SELECT NULL AS Test) в Microsoft Query и вставит его в лист.
  2. Щелкните правой кнопкой мыши таблицу, которую только что вставил MS Query, и выберите Таблица-> Изменить свойства внешних данных.
  3. Нажмите кнопку Свойства соединения, затем перейдите на вкладку Определение.
  4. В разделе «Текст команды» запишите или вставьте требуемый запрос, используя обычное соглашение «?» для параметров, затем нажмите «ОК».
  5. Нажмите «ОК», чтобы выйти из свойств внешних данных.window.
  6. Снова щелкните правой кнопкой мыши таблицу и выберите Table-> Parameters, чтобы связать параметры обычным способом.

Идея состоит в том, чтобы обойти графический интерфейс, который предоставляет MS Query, который имеет некоторые произвольные ограничения, которых нет у базового движка.

Это работает для многих сложных запросов, но не для всех.Когда я сталкиваюсь с запросом, который MS Query вообще отказывается переваривать, я либо реорганизую запрос (когда это возможно), либо создаю VIEW на сервере SQL и запрашиваю его.

0 голосов
/ 10 ноября 2015

Еще один способ решить эту проблему - использовать хранимые процедуры

CREATE PROCEDURE [dbo].[yourprocedure] @DATEFROM DATETIME, @DATETO DATETIME
AS


SELECT Query 
where date >= @datefrom
and date <= @dateto 

затем в свойствах таблицы нажмите кнопку Свойства соединения, затем перейдите на вкладку Определение. В разделе «Текст команды»:

EXEC yourprocedure @DATEFROM = ?, @DATETO = ?

а направлять? в клетки, которые вы хотите

0 голосов
/ 10 ноября 2015

к сожалению?не работает для большинства моих запросов, и многие из них не обязательно подходят для превращения в представления.

Основной альтернативой, которую я использую, является получение макроса для возврата кода

Dim Con As New ADODB.Connection
Dim RS As New ADODB.Recordset
Dim server, Database As String
Dim Data as Worksheet

Set data = ThisWorkBook.Worksheets("data")

'rename field here and elsewhere to your variable eg SD or StartDate
Dim field as string

server = "servername"
Database = "database"

'set connection string

If Con.State <> 1 Then
 Con.ConnectionString = "Provider=SQLOLEDB;Data Source=" & server & ";Initial Catalog=" & Database & ";Integrated Security=SSPI;"


'this is just setting the connection time out to infinite
setcono:
Con.ConnectionTimeout = 0
Con.CommandTimeout = 0


'this is making sure it set the connection time out to infinite
If Con.ConnectionTimeout > 0 Then GoTo setcono
If Con.CommandTimeout > 0 Then GoTo setcono

Con.Open

Set oRS = New ADODB.Recordset
oRS.ActiveConnection = Con

field = Range("A2").value

oRS.Source = "YOUR SQL QUERY "
oRS.Source = oRS.Source & " WHERE field = '"  & field & "'"

oRS.Open
data.Range("A2").CopyFromRecordset oRS
End If
oRS.Close
Con.Close
If Not oRS Is Nothing Then Set oRS = Nothing
If Not Con Is Nothing Then Set oCon = Nothing

Я бы хотел, чтобы Microsoft исправила ошибку, когда она возвращает ошибки для более сложных запросов, поскольку я расстраиваюсьсоздание макросов только для возврата простого набора данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...