首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储过程成功运行,但在从作业调用时失败。

存储过程成功运行,但在从作业调用时失败。
EN

Stack Overflow用户
提问于 2015-02-12 16:26:18
回答 1查看 3.8K关注 0票数 2

我在SQL中遇到了一个非常奇怪的错误,我希望得到一些帮助。下面的代码创建了本报告所需的两个存储过程:

代码语言:javascript
复制
USE [ONDTTEST]

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE ONDT_OPS_OTD_STEP1 
AS
    BEGIN
        SET NOCOUNT ON;

        /** Create Table **/
        CREATE TABLE ONDT_OPS_OTD_SMARTVIEW
        (
            ID      varchar(15) NOT NULL,
            STATUS  char(1) NOT NULL
        );

        /** Insert data into table **/
        INSERT INTO      [ONDT_OPS_OTD_SMARTVIEW]
        SELECT           [ID]
                        ,[STATUS]
        FROM             [CUSTOMER_ORDER]
        WHERE            [STATUS] = 'H';

        /** Update customer order table from H to R **/
        UPDATE           [CUSTOMER_ORDER]
        SET              [STATUS] = 'R'
        WHERE            [STATUS] = 'H';
    END
GO

CREATE PROCEDURE ONDT_OPS_OTD_STEP2 
AS
    BEGIN
        SET NOCOUNT ON;

        /** Update records back to H **/
        UPDATE  [CUSTOMER_ORDER]
        SET     [STATUS] = 'H'
        WHERE   [ID] IN (SELECT [ID] FROM [ONDT_OPS_OTD_SMARTVIEW]);

        /** Drop Table **/
        DROP TABLE ONDT_OPS_OTD_SMARTVIEW;
    END
GO

当我执行这两个存储过程时,它都会成功地运行,但是,当我从计划作业调用存储过程时,它会产生以下错误:

代码语言:javascript
复制
Executed as user: admin. String or binary data would be truncated. [SQLSTATE 22001] (Error 8152)  The statement has been terminated. [SQLSTATE 01000] (Error 3621).  The step failed.

我运行了分析器,发现在这两个过程中对CUSTOMER_ORDER表的更新步骤都失败了。Status列设置为char(1),存储过程在从查询中调用时工作正常,但在从作业调用时失败。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-15 16:39:38

经过一番斗争,我找到了罪魁祸首。事实证明,SQL不喜欢运行作业的用户名超过50个字符的事实。当我添加以下内容时,查询运行良好:

EXEC AS USER = 'sysadm‘

它是我的SQL管理帐户(与域帐户相同)。希望这能让我免于头痛。

感谢每一个伸出援手的人,你们很棒。

致以敬意,

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28482614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档