我有一个非常偶发使用的2008 R2 SQL Server所以我创建了一个计划任务,调用一个非常基本的存储过程,如果没有人登录就让服务器进入休眠状态(通过IF() function)...这是存储过程;
/****** Object: StoredProcedure [dbo].[sp_GoToSleep] Script Date: 07/21/2013 13:53:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[sp_GoToSleep]
AS
BEGIN
SET NOCOUNT ON;
IF NOT EXISTS
(
SELECT
a.loginame AS LoginName
FROM master.sys.sysprocesses AS a
WHERE
loginame NOT LIKE '%XXXX%'
AND hostname <> ''
GROUP BY
db_name(dbid)
, loginame
, hostname
UNION ALL
SELECT
a.LogonName AS LoginName
FROM XXXXDB.dbo.CurrentUser AS a)
BEGIN
EXEC xp_cmdshell "rundll32.exe powrprof.dll,SetSuspendState 0,1,0"
END
END
我遇到的问题是当用户登录并且数据应该存在时调用EXEC语句。 PC没有其他任何东西可以睡眠(禁用脚本时保持打开状态)。 一切都是从具有足够权限的同一本地帐户运行的,我通过该帐户下的RDP登录验证并检查我在用户登录时获得预期结果(目前只是我)。 该任务设置为在本地帐户注销时运行,并且似乎是在问题开始时...
这里有什么东西我不见了? IF函数是要启动EXEC语句,但我知道应该有数据否则会阻止它 - 除非SQL在注销帐户时以某种方式返回不同的结果? 我会喜欢这方面的一些建议,因为它让我撕裂了我的头发: - )
UPDATE:如果它有任何区别,任务调度程序通过sqlcmd调用sp - 我认为这方面的工作正在发挥作用,因为毫无疑问sp正在启动。