怎么在SQL Server Agent Job里面创建运行bat文件

NewDBA 2008-08-23 12:22:02
需要运行一个bat文件,这个bat里面又指向运行另一个sql文件(Checkjobs.sql),运行完再生成一些report,大概就是这样。
我查过我们别的SQL服务器上,也有这样的,我想一摸一样拿来用,可是有错误

可以正常运行的服务器的JOB里面是这样写的:
类型是选择 Operating system (CmdExec)
Command里面是这样写的:
X:\MICRO~1\MSSQL~1\JOBS\osql_SQL2000.bat Checkjobs

可是我在新的服务器里,除了X盘不一样,改称F盘了,但是盘里面相关的文件夹命名都是一样的,bat和sql放的地方也一样

可是我在用F:\MICRO~1\MSSQL~1\JOBS\osql_SQL2000.bat Checkjobs 时,就说我的路径不对

其实真实路径是这样的:F:\Microsoft SQL Server\MSSQL$SRVSQLINST\JOBS\...

我不知道改成MICRO~1\MSSQL~1的写法有什么规则吗?为什么一摸一样的照着写却说我路径错误呢?

另外我也不知道运行这个为什么把osql_SQL2000.bat Checkjobs 放在一起写:X:\MICRO~1\MSSQL~1\JOBS\osql_SQL2000.bat Checkjobs因为checkjobs.sql是在\JOBS\下的一个子文件夹中,跟bat文件不是一起的


...全文
611 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
NewDBA 2008-08-25
  • 打赏
  • 举报
回复
谢谢 :)
bwu851 2008-08-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 NewDBA 的帖子:]
可是我在用F:\MICRO~1\MSSQL~1\JOBS\osql_SQL2000.bat Checkjobs 时,就说我的路径不对

其实真实路径是这样的:F:\Microsoft SQL Server\MSSQL$SRVSQLINST\JOBS\...
[/Quote]

当你在写路径时, 必须写全了. 而那个"MICRO~1\MSSQL~1\..."是在显示时简略了的.

稍微扫了一下你那code, 看来得研究一下才能回答你.

另外, Checkjobs是osql_SQL2000.bat运行时的一个参数.
bwu851 2008-08-24
  • 打赏
  • 举报
回复
没具体看你的code.

想执行.bat文件, 你在建新job时, 选择运行CmdExec的就行了.
NewDBA 2008-08-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tianhuo_soft 的回复:]
30 有点少 300分 我告诉你
[/Quote]

不带这么欺负我们穷人的。。
我在这里目前只见花钱还没开始赚钱,300分俺要省吃俭用好久呢
NewDBA 2008-08-23
  • 打赏
  • 举报
回复
另外我把bat文件发上来,好心人帮我看看里面是不是也要修改一些路径,文件之类的内容的。。因为我不懂这个5555555
我知道我运行时的错误:路径不对,跟我没有修改里面的内容是不是有关系
我单独运行过Checkjobs.sql是成功的

:SQLSERVER_INSTANCE_DETAILS
set $InstanceName=

:DERIVE_SQLSERVER_SERVICE_NAME
set $ServiceName=SRVRPTHUB001
if "%$InstanceName%"=="" goto :END_DERIVE_SQLSERVER_SERVICE_NAME
set $ServiceName=%$ServiceName%\%$InstanceName%
:END_DERIVE_SQLSERVER_SERVICE_NAME

:SET_INITIAL_VALUES
set $LogFileExtension=log

for /F "eol=E tokens=5-8 delims=/ " %%i in ('echo. ^| date') do set Date-yyyymmdd=%%l%%k%%j
for /F "eol=E tokens=5-8 delims=:. " %%i in ('echo. ^| time') do set Time-hhmm=%%i%%j
set $Timestamp=%Date-yyyymmdd%%Time-hhmm%

:PROCESS_PARMS
set $parm_JobName=%1
set $parm_SendMail=%2
set $parm_ResultFileExtension=%3

set $ResultFileExtension=%$LogFileExtension%
if "%$parm_ResultFileExtension%"=="" goto :END_PROCESS_PARMS
set $ResultFileExtension=%$parm_ResultFileExtension%
:END_PROCESS_PARMS


:SET_FILENAMES
set $BatFileName=%~n0
set $BatFilePath=%~dp0
set $BatFile=%~dpnx0

set $ScriptFileName=%$parm_JobName%.sql
set $ScriptPath=%$BatFilePath%%$parm_JobName%\Scripts\
set $ScriptFile=%$ScriptPath%%$ScriptFileName%

rem set $LogFileName=%$parm_JobName%_%$Timestamp%.%$LogFileExtension%
set $LogFileName=%$parm_JobName%_Log.%$LogFileExtension%
set $LogPath=%$BatFilePath%%$parm_JobName%\Results\
set $LogFile=%$LogPath%%$LogFileName%

rem set $ResultFileName=%$parm_JobName%_%$Timestamp%.%$ResultFileExtension%
set $ResultFileName=%$parm_JobName%.%$ResultFileExtension%
set $ResultPath=%$BatFilePath%%$parm_JobName%\Results\
set $ResultFile=%$ResultPath%%$ResultFileName%

:LOG_HEADER
for /F "eol=E tokens=5-8 delims=/ " %%i in ('echo. ^| date') do set Date-dd-mm-yyyy=%%k-%%j-%%l
for /F "eol=E tokens=5-8 delims=:. " %%i in ('echo. ^| time') do set Time-hh-mm-ss.t=%%i:%%j:%%k.%%l

echo ====================================================== > %$LogFile%
echo Batch job : %$BatFileName% >> %$LogFile%
echo on path : %$BatFilePath% >> %$LogFile%
echo Commenced : %Date-dd-mm-yyyy% at %Time-hh-mm-ss.t% >> %$LogFile%
echo ------------------------------------------------------ >> %$LogFile%
echo Parms : %* >> %$LogFile%
echo ------------------------------------------------------ >> %$LogFile%
echo Script file : %$ScriptFileName% >> %$LogFile%
echo on path : %$ScriptPath% >> %$LogFile%
echo Log file : %$LogFileName% >> %$LogFile%
echo on path : %$LogPath% >> %$LogFile%
echo Result file : %$ResultFileName% >> %$LogFile%
echo on path : %$ResultPath% >> %$LogFile%
echo ====================================================== >> %$LogFile%

:RUN_OSQL
osql -E -w 2048 -n -S %$ServiceName% -i %$ScriptFile% > %$ResultFile%
if errorlevel 0 goto EXIT_NORMAL
if errorlevel 1 goto EXIT_TSQL_ERROR
if errorlevel 4 goto EXIT_OSQL_ERROR
goto EXIT_NORMAL

:EXIT_NORMAL

echo ====================================================== >> %$LogFile%
echo Run Status : Script completed successfully >> %$LogFile%
if "%$parm_SendMail%"=="Yes" goto :SEND_EMAIL
goto END

:SEND_EMAIL
set $subjectText=%$ServiceName%: %$parm_JobName%
set $fromServer=%$ServiceName%@maybank.com.sg
rem C:\Program Files\Microsoft SQL Server\MSSQL\JOBS\mailsend.exe -d aaa.com.sg -t bbb@ccc.com,ddd@aaa.com.sg -sub "%$subjectText%" -a %$ResultFile% -smtp 10.6.1.34 -f %$fromServer% -y text/html
goto END

:EXIT_TSQL_ERROR

echo ====================================================== >> %$LogFile%
echo Run Status : Script encountered errors >> %$LogFile%
goto END

:EXIT_OSQL_ERROR

echo ====================================================== >> %$LogFile%
echo Run Status : OSQL utility failed >> %$LogFile%
goto END

:END

for /F "eol=E tokens=5-8 delims=/ " %%i in ('echo. ^| date') do set Date-dd-mm-yyyy=%%k-%%j-%%l
for /F "eol=E tokens=5-8 delims=:. " %%i in ('echo. ^| time') do set Time-hh-mm-ss.t=%%i:%%j:%%k.%%l

echo Completed : %Date-dd-mm-yyyy% at %Time-hh-mm-ss.t% >> %$LogFile%
echo ====================================================== >> %$LogFile%

exit
tianhuo_soft 2008-08-23
  • 打赏
  • 举报
回复
在线等你回复
tianhuo_soft 2008-08-23
  • 打赏
  • 举报
回复
30 有点少 300分 我告诉你

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧