0

基本上我有一個批處理文件,它調用一個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 
+1

在你的代碼裏是''%hour:〜0,1%「==」「',也就是''''而不是'」「'的印刷雙引號,或者它只是一個複製/粘貼問題? –

+0

@MCND在該行的批處理文件中,只有雙引號是「」而不是「」,我認爲這是從我從其中複製腳本部分的地方開始的一個懸念。你認爲這可能是一個問題嗎?像我說的,它工作正常,如果我手動執行任務。 –

+0

你的問題是'。\ SQLEXPRESS'。計劃任務運行在另一個文件夾('%systemroot%\ system32')中。使用'cd/d'%〜dp0'切換到存儲批文件的文件夾 – Stephan

回答

0

我一直面對完全相同的錯誤。對我而言,解決方案是在腳本的末尾添加exit 0。我不明白爲什麼,但它的工作。

+0

Oo ...在批處理文件或存儲過程的結尾處? –

+0

@PaulZahra我已經嘗試了兩個,不知道哪一個工作。這是大約五年前,所以我不記得了。 – MichaelS

+0

'exit'是一個批處理命令。 sql腳本以'END'結尾。但我看不到,這在這裏可能會有幫助。 – Stephan

相關問題