2011-12-10 66 views
2

我有一種情況,可能會從多個用戶多次調用查詢,但我只希望它對數據庫運行一次(每週)。環境是SQL Server Express,因此不能通過SQL Server代理進行調度。它需要與2005年兼容。我想盡可能輕量化,所以我在尋求建議。理想情況下,數據庫範圍聲明變量 - 但我不認爲SQL Server支持這樣一個野獸?謝謝儘管被稱爲多次執行SQL Server中的查詢一次

回答

2

嘗試這樣:

IF NOT EXISTS (-- Check if you have the current week content 
    SELECT * 
    FROM WeeklyTable 
    WHERE 
      DATEPART(YEAR, DateCr) = DATEPART(YEAR, GETDATE()) 
      AND 
      DATEPART(WEEK, DateCr) = DATEPART(WEEK, GETDATE()) 
) 
BEGIN 
    -- delete old content 
    DELETE WeeklyTable 
    -- insert new content 
    INSERT INTO WeeklyTable (MyID, MyField1, ... , MyFieldN, DateCr) 
    SELECT 
     MyID, MyField1, MyField2, GETDATE() 
    FROM MainTable 
END 

您可以創建索引所需的WeeklyTable。

+0

來調試SQL sheduler,謝謝,那肯定會起作用,因爲我從另一個方向處理這個問題。 –

+0

完整的解決方案涉及創建一個服務代理「線程」,它可以被配置爲只有一個活動消息。 –

1

一個選項是SQL Scheduler作爲SQL Server Express的附加組件。

另一種選擇是創建一個小型命令行實用程序,該實用程序可以在安裝了SQL Server Express的計算機上使用Windows計劃程序進行查詢和計劃。

使用這兩個設置中的任何一個,您都可以每週選擇一次您需要的值/數值到結果表中,並且可以從該結果表中滿足一週內的任何請求。 SQL Server沒有「服務器級」的變量 - 但你總是可以定義一個表爲目的...

+0

感謝您的建議,但我瞄準的是一個(理想的)解決方案,不需要任何addtional添加基本的SQL Express安裝沒有。我只是認爲在sQL中它必須有足夠的功能,但我不希望它佔用資源。我會通過 –