sqlcmd运行精细和cmd行,但不会在SQL代理作业中生成输出作为exec cmd步骤

时间:2016-01-07 04:28:41

标签: cmd sql-server-2014 sqlcmd

我正在把头发拉出来并尝试过每一个帖子。

我有一个名为C:\ DBAReports \ testsql.sql的tsql脚本。如果我在服务器上转到命令记录提示,请运行:sqlcmd -S localhost -i C:\DBAReports\testsql.sql -o C:\DBAReports\testout.txt

但是,如果我创建一个新的代理作业,其中1步操作系统(CmdExec)作为SQL Server代理服务帐户运行,则成功退出作业报告成功,并在失败时退出作业报告失败。与所有者相同的管理员窗口登录,当我运行cmd提示时,右键单击代理作业并从步骤1开始,我得到了成功的工作(我的Windows登录调用了作业),并且步骤1被执行为user is-sql"该步骤没有生成任何输出。处理退出代码0.步骤成功"。

但它没有写输出文件。

有什么想法吗?

我想这样做的原因是我得到定期错误:18057,严重性:20,状态:2无法在我的sql server日志中设置执行内容。我希望做的是在发生这种情况时开始尝试查找SPID,状态,SQL运行等等,并将其写入输出文件。

我的testsql.sql脚本包含。

SELECT
    SPID                = er.session_id
    ,STATUS             = ses.STATUS
    ,[Login]            = ses.login_name
    ,Host               = ses.host_name
    ,BlkBy              = er.blocking_session_id
    ,DBName             = DB_Name(er.database_id)
,CommandType        = er.command
,SQLStatement       = st.text
,ObjectName         = OBJECT_NAME(st.objectid)
,ElapsedMS          = er.total_elapsed_time
,CPUTime            = er.cpu_time
,IOReads            = er.logical_reads + er.reads
,IOWrites           = er.writes
,LastWaitType       = er.last_wait_type
,StartTime          = er.start_time
,Protocol           = con.net_transport
,ConnectionWrites   = con.num_writes
,ConnectionReads    = con.num_reads
,ClientAddress      = con.client_net_address
,Authentication     = con.auth_scheme
FROM sys.dm_exec_requests er
OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) st
LEFT JOIN sys.dm_exec_sessions ses
ON ses.session_id = er.session_id
LEFT JOIN sys.dm_exec_connections con
ON con.session_id = ses.session_id

提前感谢您的帮助。我已经尝试了很多建议,要么在命令上得到语法错误,当我在sqlcmd上没有得到任何语法错误时,它就不会产生任何输出。

1 个答案:

答案 0 :(得分:0)

另一种方法 - 尝试将作业步骤修改为Type:T-SQL脚本,并将命令修改为:

EXEC master..xp_CMDShell 'C:\Work\temp\test3.bat'

请用您的替换bat文件路径。