スケジュールに従って基本的なクエリを実行するだけの SQL エージェント ジョブがあります。表示されたクエリに基づいて情報を更新します。
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';
更新が行われていない場合、ジョブは完全に実行されますが、更新がある場合は常に失敗します。このジョブが実行されるユーザーには、読み取りおよび書き込みアクセス権があります。表示されるエラーは、「文字列またはバイナリ データが切り捨てられます [sql220001] [エラー 8152]」です。なぜそれが失敗し続けるのか、私にはわかりません。
******************アップデート**********
私はここで夢中になります。スケジュールされたジョブとしては失敗しますが、他のユーザーの下でストレート クエリとして完全に実行されます。フィールドは次のとおりです。
Table1.field1 = 10 の PK 長 Table1.field2 = 1 のビット長 Table1.field3 = 1 のビット長
何をしようとしても、SQLジョブを実行しても同じエラーで失敗しますが、クエリを単独で実行でき、問題なく動作することに夢中になっています。