Why is my work with SQL agents not working?

I have an SQL agent job that just runs a basic query on a schedule. It updates information upon request.

USE DB
DECLARE @startDate AS DATETIME
DECLARE @endDate AS DATETIME
DECLARE @rcount AS VARCHAR(10)
SET @startDate = CAST(CONVERT(VARCHAR(10),GETDATE(),112) AS DATETIME) 
SET @endDate = CAST(CONVERT(VARCHAR(10),GETDATE(),112) AS DATETIME) 
--*********************************************************
-- *Run Query
--*********************************************************
UPDATE Table1
SET Table1.field1 = 'ZPR' +  Left(Table1.field1,6),
    Table1.field2 = '0',
    Table1.field3 = '0' 
WHERE  Table1.GUID IN (SELECT GUID FROM Table1 T2 
    WHERE T2.Date >= @startDate 
        AND T2.Date <= @endDate 
        AND   T2.complete = 0)
    AND Table1.co IN (SELECT co FROM VIEW('ZERO')) 
SELECT @rcount = CAST(@@ROWCOUNT AS VARCHAR(10)) + ' ' + 'row(s) affected by UPDATE';
--*********************************************************
--* Print Results
--*********************************************************
DECLARE @eSubject varchar(250)
DECLARE @emailTo varchar(250)
SET @eSubject = 'Number of rows updated'   
SET @emailTo = 'me@me.com' 
EXEC msdb.dbo.sp_send_dbmail @recipients=@emailTo,
    @subject = @eSubject,
    @body = @rcount,
    @body_format = 'HTML';

The work is done fine when no updates are performed, but not when it is. The user who is performing this task has read and write access. The error I get is "String or binary data will be truncated [sql220001] [error 8152]." I'm not sure why he continues to fail, and any help would be awesome!

****************** UPDATE **********

I'm going crazy. It does not work as a scheduled task, but works fine under any other user as a direct request. Fields as such:

Table1.field1 = PK length 10 Table1.field2 = bits 1 length Table1.field3 = bits 1 length

, SQL- , , , .

+4
7

@rcount varchar(50). , .

EDIT:

, . , , , , 50 varchar (25).

, set ( @var = [ ]), LEFT([insert data here], #) (# - ).

+4

, , 1, ? , .

+4

@rcount ​​ 10. VARCHAR(10).

, SQL- :

SELECT @rcount = CAST(@@ROWCOUNT AS VARCHAR(10)) + ' ' + 'row(s) affected by UPDATE';

. @rcount VARCHAR.

-RosSQL

+3

. , , , . , , , .

USE DB
DECLARE @startDate AS DATETIME
DECLARE @endDate AS DATETIME
DECLARE @rcount AS VARCHAR(10)
SET @startDate = CAST(CONVERT(VARCHAR(10),GETDATE(),112) AS DATETIME) 
SET @endDate = CAST(CONVERT(VARCHAR(10),GETDATE(),112) AS DATETIME) 

USE DB
DECLARE @startDate AS DATETIME
DECLARE @endDate AS DATETIME
DECLARE @rcount AS VARCHAR(10)
SET @startDate = CAST(CONVERT(VARCHAR(10),GETDATE(),112) AS DATETIME) 
SET @endDate = CAST(CONVERT(VARCHAR(10),GETDATE(),112) AS DATETIME) 
--*********************************************************
-- *Run Query
--*********************************************************
UPDATE Table1
SET Table1.field1 = 'ZPR' +  Left(Table1.field1,6),
    Table1.field2 = '0',
    Table1.field3 = '0' 
WHERE  Table1.GUID IN (SELECT GUID FROM Table1 T2 
    WHERE T2.Date >= @startDate 
        AND T2.Date <= @endDate 
        AND   T2.complete = 0)
    AND Table1.co IN (SELECT co FROM VIEW('ZERO'))

... , .

, UPDATE Table1. . 1, 1 2 .. - , .

- , , . . , Table1.field1 Table1.field1. , , UPDATE dbo.Table1. .

, field2 field3 , char (1). . WHERE T2.Date >= @startDate AND T2.Date <= @endDate , WHERE T2.Date BETWEEN @startDate AND @endDate.

+2

field2 field3 0 cast(0 as bit) '0'?

+2

, . , , , .

  SELECT @rcount = CAST(@@ROWCOUNT AS VARCHAR(10)) + ' ' + 'row(s) affected by UPDATE';
+2

I made some small adjustments that might cause problems or confuse SQL. I also assume that Field3 is actually numeric (int, etc.). Also make sure the output of View ('zero') is numeric or does not cause truncation:

USE database
DECLARE @startDate AS DATE
DECLARE @endDate AS DATE
DECLARE @rcount AS VARCHAR(MAX)
SET @startDate = GETDATE()
SET @endDate = GETDATE()
--*********************************************************
--* Query
--*********************************************************
UPDATE Table1
SET Table1.field = 'ZPR' +  Left(isnull(Table1.field,''), 7)
WHERE  Table1.field2 IN (SELECT left(isnull(field,''),10) FROM Table2 T2 
    WHERE T2.Date >= @startDate 
        AND T2.Date <= @endDate 
        AND   T2.field3 = 0)
    AND Table1.field3 IN (SELECT field FROM VIEW('ZERO')) 
SELECT @rcount = CAST(@@ROWCOUNT AS NVARCHAR(10)) + ' ' + 'row(s) affected by UPDATE';
--*********************************************************
--* Print Results
--*********************************************************
DECLARE @eSubject varchar(250)
DECLARE @emailTo varchar(250)
SET @eSubject = 'here is your email'   
SET @emailTo = 'me@me.com' 
EXEC msdb.dbo.sp_send_dbmail @recipients=@emailTo,
    @subject = @eSubject,
    @body = @rcount,
    @body_format = 'HTML';
+1
source

Source: https://habr.com/ru/post/1536264/


All Articles