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