2013-10-03 61 views
0

我正在運行SQL Server 2008.我需要查詢具有增量名稱的表。這些表的結構完全相同,我需要從所有這些表(〜50)中提取數據。這些表的命名約定如下:Break1,Break2,Break3等。我目前正在使用下面的查詢來循環數據,但問題在於生成的報告在每組數據之間留下空隙。所以,我必須投入Excel,刪除空格並將它們放在一起放入一個數據集。有沒有更好的方法來抓取數據以避免出現間隙?我的想法是創建一個臨時表並將來自每個循環的數據插入到臨時表中,但這有點凌駕於我的頭上。任何幫助將不勝感激。SS2008選擇具有循環增量名稱的表

查詢示例:結果

DECLARE @zone integer 

DECLARE ZoneCursor CURSOR FOR 
SELECT ZoneID 
FROM Zone 
ORDER BY ZoneID 
OPEN ZoneCursor 

FETCH NEXT FROM ZoneCursor into @zone 

WHILE @@FETCH_STATUS = 0 
BEGIN 

    EXEC(' SELECT 
    CONVERT(smallint, '''+ @zone+''') as ZoneID') 
    ... 
    FROM BREAK'+ @ZONE +' B (NOLOCK) 

    FETCH NEXT FROM ZoneCursor into @zone 
    END 
    CLOSE ZoneCursor 

例子:

ZoneID Zone NetworkID Network Break_Date Break_Time 
------ ------- --------- ------- -------------- -------------------------------- 
(0 row(s) affected)    

ZoneID Zone NetworkID Network Break_Date Break_Time 
------ ------ --------- ------- -------------- -------------------------------- 
2 ALPHARETTA-2538 1 CNN 4/1/2013 0:15:00 
2 ALPHARETTA-2538 1 CNN 4/1/2013 0:15:00 

ZoneID Zone NetworkID Network Break_Date Break_Time 
------ ------- --------- ------- -------------- -------------------------------- 
3 NEWTON-5491 1 CNN 4/1/2013 0:15:00 
3 NEWTON-5491 1 CNN 4/1/2013 0:15:00 
+0

你看過UNION聲明嗎?您可以使用它將每個查詢連接到一個大型查詢中。 – cbeckner

回答

0

有兩個選項可以想到。首先是UNION運算符,它可以讓你加入的一切到一個查詢:

SELECT ZONEID FROM BREAK1 (NOLOCK) 
UNION 
SELECT ZONEID FROM BREAK2 (NOLOCK) 

第二個選擇是創建一個臨時表中,選擇到這一點,那麼在你的循環結束時,選擇了它。

DECLARE @RESULTS TABLE (ZONEID INT) 
INSERT INTO @RESULTS SELECT ZONEID FROM BREAK1 
INSERT INTO @RESULTS SELECT ZONEID FROM BREAK2 
SELECT ZONEID FROM @RESULTS 

因爲你是在一個循環中使用EXEC語句,如果你使用UNION路線走,那麼你可以建立一個大型的選擇字符串,並觸發一個單一EXEC這樣做。如果你走第二條路線,那麼在循環之前生成臨時表並在循環關閉後選擇它。

+0

選擇語句的膽量相當大,所以我相信一個UNION會非常大,考慮到我也打了大約50張桌子。我可能會崩潰系統。但是,您的第二個選項是一個偉大的,所以謝謝!我會嘗試它,並希望它可以工作。 –

0

是插入記錄,你去到一個臨時表,然後選擇在年底整個臨時表?

首先,在遊標之前,用create table創建臨時表結構。臨時表以#開頭,但否則create語句完全相同。

然後將插入部分添加到您擁有的動態SQl(插入可以使用select語句而不是值statemenet)。既然你現在插入了不選擇,你將不會返回結果。所以在遊標之後,您需要從臨時表中選擇*。 (當然,我不得不說這是一個糟糕的數據庫設計,是否可以使用一個表來替代它?或者至少用所有這些表創建一個視圖並在添加新表時調整視圖?)

+0

感謝您的建議。我同意,數據庫不是以最有效的方式設置的。但是,這是由供應商設計的,所以我無法進行修改。只從它們中提取數據。 –