我在SQL中遇到了一个非常奇怪的错误,我希望得到一些帮助。下面的代码创建了本报告所需的两个存储过程:
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当我执行这两个存储过程时,它都会成功地运行,但是,当我从计划作业调用存储过程时,它会产生以下错误:
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),存储过程在从查询中调用时工作正常,但在从作业调用时失败。
谢谢
发布于 2015-02-15 16:39:38
经过一番斗争,我找到了罪魁祸首。事实证明,SQL不喜欢运行作业的用户名超过50个字符的事实。当我添加以下内容时,查询运行良好:
EXEC AS USER = 'sysadm‘
它是我的SQL管理帐户(与域帐户相同)。希望这能让我免于头痛。
感谢每一个伸出援手的人,你们很棒。
致以敬意,
https://stackoverflow.com/questions/28482614
复制相似问题