Выполните запрос один раз в SQL Server, несмотря на то, что он вызывается несколько раз - PullRequest
2 голосов
/ 10 декабря 2011

У меня есть ситуация, когда запрос может вызываться несколько раз от нескольких пользователей, но я хочу, чтобы он выполнялся один раз (в неделю) для базы данных.Среда - это SQL Server Express, поэтому планирование с помощью агента SQL Server невозможно.Он должен быть совместим с 2005 годом.Я бы тоже хотел сделать его максимально легким, поэтому прошу предложений.В идеале объявленная переменная всей базы данных - но я не думаю, что SQL Server поддерживает такого зверя?Спасибо

Ответы [ 2 ]

2 голосов
/ 10 декабря 2011

Попробуйте что-то вроде этого:

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.

1 голос
/ 10 декабря 2011

Один из вариантов будет Планировщик SQL в качестве дополнения к SQL Server Express.

Другой вариант - создать небольшую утилиту командной строки, которая будет выполнять запросы и планировать использование планировщика Windows на компьютере, на котором установлен SQL Server Express.

Используя любую из двух настроек, вы можете выбирать нужные значения / числа в таблице результатов один раз в неделю, и любые запросы в течение недели будут удовлетворяться из этой одной таблицы результатов. SQL Server не имеет общесерверных переменных, но вы всегда можете определить таблицу для этой цели ...

...