![](/img/trans.png)
[英]Stored procedure fails when called from Service Broker but runs from SSMS
[英]Stored procedure runs successfully but fails when called from a job
我遇到了一个非常奇怪的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),并且从查询中调用时存储过程可以正常工作,但是从作业中调用时则失败。
谢谢
经过很多努力,我找到了罪魁祸首。 事实证明,SQL不喜欢运行作业的用户名超过50个字符的事实。 当我添加时查询工作正常:
以用户身份执行='sysadm'
这是我的SQL管理员帐户(与域一具有相同的权限)。 希望这可以使某人摆脱我的头痛。
谢谢大家的帮助,你们很棒。
问候,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.