尽管多次调用,但在SQL Server中执行一次查询

时间:2011-12-10 14:55:06

标签: sql-server sql-server-2005 sql-server-2008

我有一种情况,可能会从多个用户多次调用查询,但我只希望它对数据库运行一次(每周)。环境是SQL Server Express,因此不能通过SQL Server代理进行调度。它需要与2005兼容。我想让它尽可能轻量级,所以我要求提出建议。理想情况下,数据库范围声明变量 - 但我不认为SQL Server支持这样的野兽?感谢

2 个答案:

答案 0 :(得分: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创建所需的索引。

答案 1 :(得分:1)

一个选项是SQL Scheduler作为SQL Server Express的附加组件。

另一个选项是创建一个小型命令行实用程序,在安装SQL Server Express的计算机上使用Windows Scheduler进行查询和计划。

使用这两种设置中的任何一种,您可以每周一次在结果表中选择所需的值/数字,并且将从该一个结果表中满足一周中的任何请求。 SQL Server没有"服务器范围内"变量 - 但您总是可以为此目的定义一个表...