Sql server 在SQL Server中执行一次查询,尽管多次调用
我遇到的情况是,一个查询可能会被多个用户多次调用,但我只希望它对数据库运行一次(每周)。该环境是SQL Server Express,因此不能选择通过SQL Server代理进行调度。它需要与2005年兼容。我也想让它尽可能轻,所以我想征求一些建议。理想情况下是一个数据库范围的声明变量——但我不认为SQL Server支持这样的beast?谢谢一个选项是作为SQL Server Express的附加组件 另一个选项是创建一个小型命令行实用程序,该实用程序使用安装SQL Server Express的计算机上的Windows调度器执行查询和调度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没有“服务器范围”的变量-但您可以为此定义一个表…尝试以下方法:
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“线程”,该线程可以配置为只有一条活动消息。