基本上我有一个批处理文件,它调用一个SQL Server 2008 R2存储过程,该存储过程为5%分段的片段化表格调用该数据库,并将报告输出到文本文件。为什么这个批处理文件不能自动执行?
该批处理文件被设置为一个任务计划程序作业运行过夜。
在任务计划程序中如果我右键单击任务并选择立即运行,它将执行正常,该脚本反过来在SQL Server上运行并且输出被重定向到文本文件,此时所有内容都按需要工作,问题是当我自动化过夜时触发。
set local
REM Preparing Timestamp Information
set year=%date:~6,4%
set month=%date:~3,2%
set day=%date:~0,2%
set hour=%time:~0,2%
REM Replace leading space with zero
if “%hour:~0,1%” ==” ” set hour=0%hour:~1,1%
set minute=%time:~3,2%
set seconds=%time:~6,2%
set FILENAMEANDPATH= c:\DBMaintenanceLogs\SP_InspectorLog_%day%-%month%-%year%_%hour%-%minute%-%seconds%.log
sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_DBIndexFragmentationInspector @IndexFragmentationPercentage=5" -d MyDBName -o %FILENAMEANDPATH%
的问题是,单独留在家中当任务计划程序作业将不会运行,任务说,与返回码255顺利完成?
该任务设置为使用系统管理员帐户运行。
P.S.存储过程是:
USE [MyDBName]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_DBIndexFragmentationInspector]
@IndexFragmentationPercentage INT
AS
BEGIN
SELECT
OBJECT_NAME(A.[object_id]) as 'TableName',
B.[name] as 'IndexName',
A.[index_type_desc],
A.[avg_fragmentation_in_percent]
FROM
sys.dm_db_index_physical_stats(db_id(),NULL,NULL,NULL,'LIMITED') A
INNER JOIN
sys.indexes B ON A.[object_id] = B.[object_id] and A.index_id = B.index_id
where [avg_fragmentation_in_percent] > @IndexFragmentationPercentage
order by TableName
END
在你的代码里是''%hour:〜0,1%“==”“',也就是''''而不是'”“'的印刷双引号,或者它只是一个复制/粘贴问题? –
@MCND在该行的批处理文件中,只有双引号是“”而不是“”,我认为这是从我从其中复制脚本部分的地方开始的一个悬念。你认为这可能是一个问题吗?像我说的,它工作正常,如果我手动执行任务。 –
你的问题是'。\ SQLEXPRESS'。计划任务运行在另一个文件夹('%systemroot%\ system32')中。使用'cd/d'%〜dp0'切换到存储批文件的文件夹 – Stephan