如何捕获 CMDEXEC SQL Server 作业的退出代码?

2023-12-02

以下 SQL Server 作业始终退出并返回代码 0 表示成功,而实际上它没有执行其作业,即它不会删除“test.txt”。 如何捕获实际的退出代码(例如 %ERRORLEVEL% 或“权限被拒绝”之类的消息,或指示 msdb.dbo.sp_add_jobstep 上 @command 成功或失败的任何有意义的响应)?

Remarks:

  • {DBname} 是我拥有的数据库的名称
  • {proxyName} 是 SQL Server 代理代理(对“操作系统 (CmdExec)”子系统有效)的名称,属于映射到 SQL Server 中 Windows 域登录的凭据,该凭据具有完全控制{folderUNC}
  • {folderUNC} 是“test.txt”所在文件夹的完整 UNC 路径

一些可能有用的细节:

  • 服务器:Microsoft SQL Server 企业版(64 位)版本 9.00.4060.00
  • 操作系统:Microsoft Windows NT 5.2 (3790)
  • 我不是系统管理员,只是数据库{DBname}的所有者

CODE:

USE {DBname}
GO

DECLARE @returnCode AS INT
DECLARE @jobName NVARCHAR(128)
DECLARE @jobStep1Name SYSNAME

SET @jobName = 'CMDEXEC Test Job' 
SET @jobStep1Name = 'CMDEXEC Test Job Step 1'

EXEC @returnCode = msdb.dbo.sp_add_job 
    @job_name = @jobName,
    @enabled = 1,
    @start_step_id = 1,
    @notify_level_eventlog = 2,
    @delete_level = 0;

 IF (@@ERROR <> 0 OR @returnCode <> 0)
     PRINT N'Error @ sp_add_job. @@ERROR = ' + CONVERT(VARCHAR(10), @@ERROR) + 
          N' @returnCode = ' + CONVERT(VARCHAR(10), @returnCode

EXEC @returnCode = msdb.dbo.sp_add_jobstep
    @job_name = @jobName, 
    @step_id = 1, 
    @step_name = @jobStep1Name, 
    @subsystem = 'CMDEXEC', 
    @command = 'DEL {folderUNC}\test.txt',
    @cmdexec_success_code = 0,
    @on_success_action = 1,
    @on_fail_action = 2,
    @proxy_name = '{proxyName}';

 IF (@@ERROR <> 0 OR @returnCode <> 0)
     PRINT N'Error @ sp_add_job. @@ERROR = ' + CONVERT(VARCHAR(10), @@ERROR) + 
          N' @returnCode = ' + CONVERT(VARCHAR(10), @returnCode

EXEC @returnCode = msdb.dbo.sp_add_jobserver 
    @job_name = @jobName;

 IF (@@ERROR <> 0 OR @returnCode <> 0)
     PRINT N'Error @ sp_add_job. @@ERROR = ' + CONVERT(VARCHAR(10), @@ERROR) + 
          N' @returnCode = ' + CONVERT(VARCHAR(10), @returnCode

EXEC @returnCode = msdb.dbo.sp_start_job 
    @job_name = @jobName,
    @step_name = @jobStep1Name;

 IF (@@ERROR <> 0 OR @returnCode <> 0)
     PRINT N'Error @ sp_add_job. @@ERROR = ' + CONVERT(VARCHAR(10), @@ERROR) + 
          N' @returnCode = ' + CONVERT(VARCHAR(10), @returnCode

EXEC @returnCode = msdb.dbo.sp_delete_job 
    @job_name = @jobName;

 IF (@@ERROR <> 0 OR @returnCode <> 0)
     PRINT N'Error @ sp_add_job. @@ERROR = ' + CONVERT(VARCHAR(10), @@ERROR) + 
          N' @returnCode = ' + CONVERT(VARCHAR(10), @returnCode

问题似乎在于del不设置errorlevel当它失败时。有多种方法可以“解决”这个问题,但就我个人而言,我会选择编写自己的delete.exe,或通过.bat 文件。

示例:(删除.bat)

@echo off

del "%1"
if exist "%1" GOTO FAIL
EXIT /B 0

:FAIL
ECHO "File still there ! (%1)"
EXIT /B 1

你可以这样称呼它(@command):

delete.bat c:\test.txt

当文件在据称被删除后仍然存在时,它将返回失败。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何捕获 CMDEXEC SQL Server 作业的退出代码? 的相关文章

  • SQL 几何 VS 小数(8,6) 纬度、经度性能

    我正在研究选择与给定坐标一定距离内的最近点的性能 选项是以太使用两个decimal 8 6 纬度 长列或单列geography列并与之合作 我只感兴趣哪个更快 TL DR地理大约快 10 倍 好的 我已经设置了测试 几张桌子 一张id la
  • 在 SQL Server 中创建层次结构

    我有以下格式的数据 Table 1 e id e name e type 1 CBC 2 2 ABC 3 3 N2 1 4 CBC1 3 5 ABC1 3 6 N1 1 Table 2 N ID N Name 3 N2 6 N1 Table
  • 根据条件生成脚本

    可以使用 SQL Server Management Studio 生成特定表的插入 方法是右键单击数据库 gt 任务 gt 生成脚本 选择表 最后仅选择数据 然而 随着时间的推移 表变得越来越大 我只需要具有特定条件的插入 这只会返回该表
  • 如何在使用存储过程插入数据表时获取范围标识列

    我正在使用存储过程插入数据表并之前创建了一个类型表 查询是我想取回已在此会话中插入的所有 ProdID 对于单个插入 我可以获取范围标识 但我想获取最近插入的所有内容 提前致谢 dbo sp Isert dt Product Product
  • SQL Server 连接池不检测关闭的连接?

    多年来 我在所有连接到 SQL 服务器的 Web 应用程序上都遇到了非常奇怪的问题 问题是 如果数据库服务器发生问题 服务器重新启动或其他问题 de web 应用程序将从那时起停止工作 即使数据库服务器处于活动状态并且之后运行良好 发生的情
  • 哪种本机 dotNet 数据类型最适合传递 SQL Server HierarchyId 值?

    具体来说 我们有一个接受 HierarchyId 作为参数的 SQL Server 存储过程 并且通常我们的存储过程上有一个 SOAP 层 允许通过 SOAP 调用它们 SOAP 服务是使用 C 方法上的 WebMethod 属性来实现的
  • 如何将 nvarchar 解码为文本(SQL Server 2008 R2)?

    我有一个 SQL Server 2008 R2 表nvarchar 4000 field 存储该表的数据如下所示 696D616765206D61726B65643A5472 or 303131 011 我看到每个字符都编码为十六进制 我如
  • Crystal Reports 假定存储过程中列的数据类型错误

    Crystal Reports Engine 有时认为从某些存储过程返回的字段实际上是类型的原因是什么money is a varchar 255 因此 我无法应用任何数字格式 你确定你有铸成金钱的领域吗 您最近是否更改了数据类型 并且之后
  • 如何在 T-SQL 中实现 ZIP JOIN?

    假设我有表 Foo Id Color 1 Red 2 Green 3 Blue 4 NULL 和表 Bar Value 1 2 5 我想使用简单的语句创建表 Result 来获取 Id Color Value 1 Red 1 2 Green
  • TSQL 返回 NO 或 YES,而不是 TRUE 或 FALSE

    如果某些列返回 FALSE 如何显示不同的值 例如 COLUMN BASIC 返回 FALSE 但我需要向用户显示 YES 或 NO 情况为 FALSE 返回 NO 如果是 varchar 或 bit 则处理 NULL case when
  • WinForms 应用程序设计 - 将文档从 SQL Server 移动到文件存储

    我有一个连接到 SQL Server 的标准 WinForms 应用程序 该应用程序允许用户上传当前存储在数据库中的文档 在使用图像列的表中 我需要更改这种方法 以便将文档存储为文件 并将文件的链接存储在数据库表中 使用当前的方法 当用户上
  • 一个存储过程创建的临时表可以在另一个存储过程中使用吗?

    我有一个存储过程 它使用找到的索引创建一个临时表CONTAINSTABLE就像 我放了一段存储过程代码 CREATE TABLE tmpTable ID INT RANK INT SELECT query SELECT DISTINCT I
  • 使用 WHILE 创建虚拟数据

    我尝试使用 a 在表中插入一些虚拟数据WHILE 但它运行得非常非常慢 我在想也许我写的代码不正确 你能看一下并确认一下吗 Insert dummy data DECLARE i int Content int SET i 5001 WHI
  • 退出代码大于 255 — 可能吗?

    如果是 在哪个操作系统 shell 或其他操作系统上 考虑以下 Java 程序 我使用 Java 只是作为示例 任何语言都适合这个问题 这更多地与操作系统有关 public class ExitCode public static void
  • 在 bash 中添加(收集)退出代码

    我需要依赖于脚本中的几个单独的执行 并且不想将它们全部捆绑在一个丑陋的 if 语句中 我想使用退出代码 每次执行并添加它 最后 如果这个值超过阈值 我想执行一个命令 伪代码 ALLOWEDERROR 5 run something RESU
  • 快速转储 SQL Server 表

    我在 SQL Server 2008 R2 中有一个大表 它包含数十亿行 我需要在我们的应用程序中加载整个数据集 查询全表非常慢 我想使用 bcp 将其转储到文件中并加载它 但问题是字符串列包含各种特殊字符 如 t 0 逗号和 n 我找不到
  • 在 SQL Server 中处理日期

    我正在开发一个 ASP NET 网站 我从网页获取日期 然后根据用户输入我想从 SQL Server 数据库获取结果 使用存储过程 问题是我只能从用户界面获取这种格式的日期2016 10 08这是字符串类型 但在数据库中 我有一个类型为da
  • Kerberos 双跳

    我们遇到了臭名昭著的 Kerberos 双跳问题 这是一个全新的域 是从以前使用模拟和委派的另一个提供商迁移而来的 我们已将操作系统升级到最新的 SQL 服务器 2017 WPF 应用程序 使用域凭据 gt Web 服务 IIS 10 上的
  • 了解 SSMS 2008 中关系的更新和删除规则

    当我们定义外键约束时 我对 SQL Server 2008 Management Studio 中的更新和删除规则的含义感到困惑 我也没有找到相关的帮助文档 例如F1帮助 这是屏幕快照 如果有人能描述它们的含义并推荐一些相关文档来阅读 我将
  • Spark.read 在 Databricks 中给出 KrbException

    我正在尝试从 databricks 笔记本连接到 SQL 数据库 以下是我的代码 jdbcDF spark read format com microsoft sqlserver jdbc spark option url jdbc sql

随机推荐

  • 使用类型擦除在 Swift 函数中返回通用类型(无法转换类型的返回表达式...)

    我对 swift 中的泛型有疑问 让我们公开我的代码 protocol FooProtocol associatedtype T protocol Fooable extension Int Fooable extension String
  • 为什么 ARC 禁止调用未声明的方法?

    当使用手动内存管理时 我们可以编写对类中未声明的方法的调用 在这种情况下 我们在编译过程中得到的只是警告 这是维基百科对 Objective C 最独特的功能之一的描述 面向对象编程的 Objective C 模型基于向对象实例传递消息 在
  • Android 多重通知避免更新时闪烁

    我正在开发这样的应用程序 它使用多个通知 其中每个通知都有播放暂停图标 用于执行音乐播放器的播放 暂停 但更新通知时会出现奇怪的行为 这些通知在更新时会不断闪烁 我的代码如下 SuppressLint NewApi public void
  • 默认情况下,Windows 内存映射文件内容是否始终归零?

    我凭经验确定 在我的系统上 创建为特定大小的内存映射文件在默认情况下总是完全清零 例如 使用调用 HANDLE hMM CreateFileMapping h NULL PAGE READWRITE 0 0x01400000 20MB NU
  • 如何读取多个XML节点? (创新设置)

    这是我想要读取的 XML 我有同名的节点 我想访问节点以在组合框中显示国家 地区并在列表框中显示货币 XML 如下所示
  • 配置面板的垂直菜单

    我想创建像这个例子这样的配置面板 问题是我不知道如何在左侧创建垂直菜单 你能举一些类似菜单的例子吗 package verticalmenubar import javafx application Application import j
  • Flash 还是 Flex 更适合构建用户交互式订购“向导”网站?

    我想看看这些是否 构建了一个 flash 站点 支持用户定制的订购流程 是使用常规 flash 还是 Flex 完成的 Site 1 Site 2 Site 3 Site 4 所有这些都 引导用户 完成定制的订购流程并捕获他们的所有选择并向
  • 如何在 Bootstrap 中更改 btn 颜色

    有没有办法改变一切 btnBootstrap 中的属性 我已经尝试过以下内容 但有时它仍然显示默认的蓝色 例如单击并移除鼠标等后 我怎样才能完全改变整个主题 btn primary btn primary hover btn primary
  • Python MySQLdb 未导入

    我已经使用安装了mysql服务器 sudo apt get install mysql server 然后我使用安装了 python mysqldb sudo apt get install python mysqldb 但是当我在 pyt
  • 在 CSS 文件中访问 Ruby 中的区域设置

    所以我在一个项目中使用 CSS JS 和 Ruby 现在我在 ruby 中设置了位置等 但我想在我的 css 文件上访问它们 这是为了自定义特定区域设置的视图 我在我的控制器中完成了以下操作 before filter set locale
  • 命名空间更改后 DataContractSerializer 兼容性

    我有一个类需要序列化 namespace serializedobject DataContract public class Class1 string string1 string string2 EntityA entity Data
  • 用于匹配域和子域的正则表达式(Java 中)

    我需要验证给定的 URL 是否与我的域名掩码匹配 示例 我只想允许满足此 伪掩码 的域 https domain com http domain com 所以接下来的域是可以的 http my domain com something bl
  • 在数组中排序

    对数组进行排序时 例如 A 5 1 4 5 3 2 输出必须按升序排列为 1 2 3 4 5 使用冒泡排序的概念 我的输出是0 1 2 3 4 我的代码有什么问题 int A 5 1 5 3 2 4 for int i 0 i lt 5 i
  • 打印 MySQLdb 运行的实际查询?

    我正在寻找一种在执行查询时调试查询的方法 我想知道是否有一种方法可以让 MySQLdb 在完成插入参数等操作后打印出它运行的实际查询 从文档来看 似乎应该有一个 Cursor info 调用来提供有关上次查询运行的信息 但这在我的版本 1
  • 验证预填充的 jQuery 表单(第一个字段清除时无效,ASP.NET 且不显眼)

    我有一个可以填写 保存 加载和重新编辑的表格 当它被加载并重新编辑时 它可能开始有效 当一个字段在加载时有效时 我希望它在违反规则编辑时立即无效 简而言之 这就是我的问题 我怀疑这是由我找不到的某些配置选项支持的 目前 只有在以下情况下它才
  • 来自同一来源的多个 NFT

    一般性的 NFT 问题 但不要攻击我 我真的试图找到答案 NFT 可以从同一张图像或该图像的副本创建吗 以我创建的这个 NFT 狮子猫为例 https rarible com token 0x60f80121c31a0d46b5279700
  • 在一次计算中求和单选按钮值和复选框值 - javascript 和 html

    我正在尝试计算单选按钮和复选框的值 我让单选按钮按要求工作 但无法为复选框提供正确的脚本 我希望复选框有一个小计 工作正常 然后将该小计添加到单选按钮的计算中 以下是我到目前为止所拥有的 任何建议 将不胜感激 谢谢
  • 如何从 Android 上的应用程序启动 URL?

    如何编写我的 Android 应用程序以启动 Web 浏览器来显示给定的 URL 我不想将网络浏览器组件嵌入到我的应用程序中 而是希望启动 Android 网络浏览器来显示 URL Thanks 只需使用具有正确操作和数据的 Intent
  • PHP if/else 语句

    如何在 PHP 中编写以下语句 如果 body ID home 则插入一些 html 例如 h1 I am home h1 否则 插入此 html p I m not home p 使用本机 PHP 模板执行此操作 h1 I am home
  • 如何捕获 CMDEXEC SQL Server 作业的退出代码?

    以下 SQL Server 作业始终退出并返回代码 0 表示成功 而实际上它没有执行其作业 即它不会删除 test txt 如何捕获实际的退出代码 例如 ERRORLEVEL 或 权限被拒绝 之类的消息 或指示 msdb dbo sp ad