2011-03-30 18 views
0

我有一個連接多個表的複雜SQL查詢。下面是一個淡化的版本...從Excel中調用多表SQL查詢而不使用sproc

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的好方法是什麼?

回答

1

如果您的查詢確實是一個單一的查詢(而不是幾個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,與?更換paramters。沒有declare s或變量,只是一個select。參數將按位置引用,而不是按名稱引用。這意味着,如果在查詢中多次使用相同的參數,則它們是不同的參數,並且必須單獨添加到模板中。

你知道有一個工作查詢表,它將接受參數並同時執行一個複雜的查詢,「不能用圖形表示」。

問題是,Excel可以使用參數運行一個複雜的查詢,它是無法應付它的Microsoft Query。

請注意,嘗試使用Microsoft Query編輯此查詢表會破壞它。你可能想把你的SQL保存在別的地方,以防你不情願地這樣做。

+0

這對我很好。謝謝! – user467384 2011-03-31 20:01:04

0

是的,你可以從Excel中調用查詢。有許多不同的方法,我會查找ADO和Excel來獲取語法。將值存儲在單元格中會很容易,讀取它們並直接或使用動態SQL將它們作爲參數添加。

Here's an article讓你開始。

相關問題