【发布时间】:2015-02-12 16:26:18
【问题描述】:
我在 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),存储过程在从查询中调用时可以正常工作,但在从作业中调用时失败。
谢谢
【问题讨论】:
-
CUSTOMER_ORDER表的架构是什么? -
@RafaelSampaio 他说“模式”只是表的列名和数据类型,而不是您刚刚转储的所有信息。如
ID int, Status char(1)...等 -
@SoulTrain 架构是 ID varchar(15),STATUS char(1),感谢您澄清
-
感谢您的信息。一切看起来都井井有条。为了安全起见,您能否在插入语句中指定列名。点赞
INSERT INTO [ONDT_OPS_OTD_SMARTVIEW] ( [ID] ,[STATUS]) SELECT [ID] ,[STATUS] FROM [CUSTOMER_ORDER] WHERE [STATUS] = 'H';看看有没有帮助
标签: sql sql-server stored-procedures sql-agent-job sql-job