我有一个连接多个表的复杂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电子表格中调用此查询,但我没有向要查询的数据库添加存储过程的权限。我还希望能够从电子表格中设置AreaPath和IterationPath的值。
是否可以从Excel调用此查询?如果不是,执行此查询并将查询的输出导入Excel的好方法是什么?
发布于 2011-03-31 08:16:57
如果您的查询确实是一个查询(而不是多个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或变量,只有一个select。参数将按位置引用,而不是按名称引用。这意味着,如果同一参数在查询中多次使用,则它们是不同的参数,必须单独添加到模板中。
您知道,有一个可以工作的查询表,它可以接受参数,同时执行一个“不能用图形表示”的复杂查询。
关键是,Excel可以运行带参数的复杂查询,而Microsoft query无法处理它。
请注意,尝试使用Microsoft query编辑此查询表将会损坏它。你可能想把你的SQL保存在别的地方,以防你走神了。
发布于 2011-03-31 07:17:46
可以,您可以从Excel调用查询。有许多不同的方法,我会查找ADO和Excel来获得语法。直接或使用动态SQL,在值所在的单元格中读取它们,并将它们作为参数添加,这将很容易。
Here's an article帮助您入门。
https://stackoverflow.com/questions/5493590
复制相似问题