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

Sql server 在SQL Server中执行一次查询,尽管多次调用,sql-server,sql-server-2005,sql-server-2008,Sql Server,Sql Server 2005,Sql Server 2008,我遇到的情况是,一个查询可能会被多个用户多次调用,但我只希望它对数据库运行一次(每周)。该环境是SQL Server Express,因此不能选择通过SQL Server代理进行调度。它需要与2005年兼容。我也想让它尽可能轻,所以我想征求一些建议。理想情况下是一个数据库范围的声明变量——但我不认为SQL Server支持这样的beast?谢谢一个选项是作为SQL Server Express的附加组件 另一个选项是创建一个小型命令行实用程序,该实用程序使用安装SQL Server Expres

我遇到的情况是,一个查询可能会被多个用户多次调用,但我只希望它对数据库运行一次(每周)。该环境是SQL Server Express,因此不能选择通过SQL Server代理进行调度。它需要与2005年兼容。我也想让它尽可能轻,所以我想征求一些建议。理想情况下是一个数据库范围的声明变量——但我不认为SQL Server支持这样的beast?谢谢

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

另一个选项是创建一个小型命令行实用程序,该实用程序使用安装SQL Server Express的计算机上的Windows调度器执行查询和调度


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

尝试以下方法:

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创建所需的索引。

谢谢您的建议,但我的目标是找到一个(理想的)解决方案,它不需要基本sql express安装所没有的任何附加插件。我只是认为sQL本身必须有足够的功能,但我不希望它占用资源。我将深入研究SQL Scheduler Though谢谢,这肯定会奏效,出于某种原因,我从另一个方向解决了这个问题。完整的解决方案包括创建一个Service broker“线程”,该线程可以配置为只有一条活动消息。