【问题标题】:Stored Procedure Fails on Converting Datetime Only When Ran From SQL Agent Job存储过程仅在从 SQL 代理作业运行时转换日期时间失败
【发布时间】:2015-01-19 22:57:04
【问题描述】:

问题

以用户身份执行:CORP\SVC-UK-SVCEMI。从字符串转换日期和/或时间时转换失败。 [SQLSTATE 22007](错误 241)。步骤失败。

我面临的问题是我创建了一个存储过程,在 SSMS 查询窗口中执行时运行良好 - 但从 SQL 代理作业运行时失败。

为什么我卡住了

由于作业在相同的数据库和数据上运行完全相同的过程,我非常困惑为什么这不起作用。

我的想法

从逻辑上讲,我会把它归结为用户帐户(因为这是我确定的唯一可能的不同),我想也许 SQL 代理服务帐户在我自己的时候有一个不同的日期格式设置。但是,我的印象是这些设置在服务器级别(我们最近更改为 GB-English) - 而不是帐户级别。

由于我无法在查询窗口中复制此问题,因此调试导致问题的行变得非常困难


从 SSMS 查询窗口运行

SQL 代理作业停止配置

运行作业时产生错误

由于我认为这是 SQL 代理配置问题,因此我没有从 SQL 过程中添加任何代码。我可以根据要求执行此操作,但它很长(在编写 SQL 时,我认为我认为可读性胜于短——可能还有性能)

任何关于可能导致此问题的想法将不胜感激。

非常感谢。

【问题讨论】:

  • 改进您的日期处理 sql 代码...
  • 1) 向我们展示代码。如果您可以指出故障所在,那将很有帮助 2) 您说“我的印象是这些设置在服务器级别..”有一个服务器级别的默认设置,但他们可以也可以在会话级别和连接时设置,IIRC。
  • @RBarryYoung - 看起来你是对的。我已经设置了一个跟踪,当程序通过代理运行时,它似乎在运行时将自己设置为“将语言设置更改为 us_english”。如何确定原因?
  • 这是来自您的 SSIS 包的连接设置。如果您可以向我们展示失败的行以及日期字符串的外观,我们或许可以向您展示如何解决此问题。
  • 干杯 RBarry,看起来当在数据库上设置语言时,服务帐户被遗漏了。希望不是出于任何正当理由。在主数据库上运行以下内容修复了我的问题 ALTER LOGIN [CORP\SVC-UK-SVCEMI] WITH DEFAULT_LANGUAGE=[British]

标签: tsql sql-server-2012 sql-agent-job


【解决方案1】:

Job 中的存储过程可能在与您从 SSIS 启动它时使用的用户帐户不同的用户帐户下运行。

而且,这个用户帐户可能有不同的设置

为您的存储过程尝试“EXECUTE AS user=xxxx”并使用您自己的用户帐户,然后看看会发生什么...

见:EXECUTE AS

【讨论】:

    猜你喜欢
    • 2019-02-06
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多