Вызов многостолового SQL-запроса из Excel без sproc - PullRequest
0 голосов
/ 31 марта 2011

У меня сложный запрос SQL, который объединяет несколько таблиц. Вот разбавленная версия ...

DECLARE @AreaPath varchar(128)
DECLARE @IterationPath varchar(256)

SELECT 
  [Scenario Id],
  scenarios.[Feature Id],
  [Task Id],
  [AreaPath],
  [IterationPath]
FROM
    (SELECT 
      [SourceWorkItemID] as [Scenario Id],
      [TargetWorkItemID] as [Feature Id],
      [LinkName]
    FROM [TFS_Warehouse].[dbo].[FactWorkItemLinkHistory] as hist
    JOIN TFS_Warehouse.dbo.DimWorkItemLinkType as links
      ON hist.WorkItemLinkTypeSK = links.WorkItemLinkTypeSK
    Where [LinkName] = 'Feature Link') as scenarios
LEFT OUTER JOIN
    (SELECT 
      [SourceWorkItemID] as [Feature Id],
      [TargetWorkItemID] as [Task Id],
      [LinkName]
    FROM [TFS_Warehouse].[dbo].[FactWorkItemLinkHistory] as hist
    JOIN TFS_Warehouse.dbo.DimWorkItemLinkType as links
      ON hist.WorkItemLinkTypeSK = links.WorkItemLinkTypeSK
    Where [LinkName] = 'Child') as tasks
  ON scenarios.[Feature Id] = tasks.[Feature Id]
LEFT OUTER JOIN TFS_Warehouse.dbo.CurrentWorkItemView as workItem
  ON tasks.[Task Id] = workItem.System_Id
WHERE [IterationPath] = @IterationPath
  AND [AreaPath] = @AreaPath
ORDER BY [Scenario Id], scenarios.[Feature Id], tasks.[Task Id]

Я бы хотел вызвать этот запрос из таблицы Excel, но у меня нет прав для добавления sproc в базу данных, к которой я обращаюсь. Я также хотел бы иметь возможность устанавливать значения для AreaPath и IterationPath из электронной таблицы.

Можно ли вызвать этот запрос из Excel? Если нет, каков хороший способ выполнить этот запрос и импортировать выходные данные запроса в Excel?

Ответы [ 2 ]

1 голос
/ 31 марта 2011

Если ваш запрос действительно является одним запросом (в отличие от нескольких операторов SQL), то вы можете подшутить:

Создайте обычную таблицу запросов Excel, которая указывает на правильный источник данных и включает необходимое количество параметров, но выбирает что-то не относящееся к делу (например, select 1,2,3,4,5 from existing_table where existing_field = [param1] and existing_field = [param2]).
Теперь у вас есть шаблон запроса с двумя параметрами. Свяжите их с ячейками на листе.

Теперь выберите ячейку в результатах запроса шаблона и выполните эту команду:

activecell.querytable.commandtext = "sql text"

В sql text заменить параметры на ?. Нет declare s или переменных, просто select. Параметры будут указываться по позиции, а не по имени. Это означает, что если один и тот же параметр используется в запросе несколько раз, это разные параметры, которые необходимо добавить в шаблон отдельно.

Вы знаете, что у вас есть рабочая таблица запросов, которая будет принимать параметры и одновременно выполнять сложный запрос, который "не может быть представлен графически".

Дело в том, что Excel может выполнять сложный запрос с параметрами, но Microsoft Query не справляется с этим.

Обратите внимание, что попытка изменить эту таблицу запросов с помощью Microsoft Query приведет к ее разрушению. Возможно, вы захотите сохранить свой SQL где-нибудь еще на случай, если вы сделаете это рассеянно.

0 голосов
/ 31 марта 2011

Да, вы можете вызвать запрос из Excel.Есть несколько разных способов, я бы посмотрел ADO и Excel, чтобы получить синтаксис.Было бы легко иметь ячейки со значениями, читать их и добавлять их в качестве параметров либо напрямую, либо с использованием динамического SQL.

Вот статья , с которой можно начать.

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