2015-02-12 6 views
1

Я столкнулся с очень странной ошибкой в ​​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 для обеих процедур. Столбец «Состояние» задается как char (1), и хранимая процедура работает правильно при вызове из запроса, но при вызове из задания он не работает.

Благодаря

+0

Какая схема таблицы 'CUSTOMER_ORDER'? – SoulTrain

+0

[Я поделился этим с помощью pastebin] (http://pastebin.com/gK3zTsdc). Благодарю. –

+0

@ RafaelSampaio он сказал «схема», как только имена столбцов и типы данных для таблицы, а не всю эту информацию, которую вы просто сбросили. Как в 'ID int, Status char (1) ...' etc – Tanner

ответ

0

После много борьбы я нашел виновника. Оказывается, SQL не нравится, что имя пользователя, выполняющего задание, имеет длину более 50 символов. Запрос отлично работает, когда я добавил:

EXEC AS USER = 'SYSADM'

это мой SQL учетную запись администратора (такие же права, как одного домена). Надеюсь, это спасет кого-то от головной боли, которую это вызвало у меня.

Спасибо всем, кто оказал помощь, вы, ребята, великолепны.

С уважением,

Смежные вопросы