2014-04-04 5 views
0

여러 UPDATE 문을 실행하는 SQL 에이전트 작업이 있습니다. 내가 원하는 것은 매일 실행 한 후 이메일을 보내도록하는 것입니다. 이메일을 받았지만 영향을받은 행 수나 그 밖의 행 수가 표시되지 않습니다. 여기에 내가 가진 것이있다.업데이트 sql 에이전트 작업이 실행 된 후 영향을받은 행 수를 나타내는 dbmail을 보내려고합니다.

--Print @tableHTML 
DECLARE @eSubject varchar(250) 
DECLARE @emailTo varchar(250) 
SET @eSubject = 'Number of rows updated' 
SET @emailTo = '[email protected]' 
EXEC msdb.dbo.sp_send_dbmail @[email protected], 
    @subject = @eSubject, 
    @body = @@ROWCOUNT, 
    @body_format = 'HTML'; 

작업이 의지 종류하지만 나는 오히려 것 것은 그러나

--Print @tableHTML 
DECLARE @eSubject varchar(250) 
DECLARE @emailTo varchar(250) 
SET @eSubject = 'Number of rows updated' 
SET @emailTo = '[email protected]' 
EXEC msdb.dbo.sp_send_dbmail @[email protected], 
    @subject = @eSubject, 
    @body = @@ROWCOUNT + 'row(s) affected by UPDATE', 
    @body_format = 'HTML'; 

입니다, 내가 @@ ROWCOUNT 후에 인해 '+'에 구문 오류를 얻을.

+0

@@이 ROWCOUNT''의 값을 저장하기 위해 INT 변수를 사용하여이되어야한다 쿼리가 실행 된 바로 그 다음 명령문은 그 변수를 @body = @ rcount'로 설정합니다. –

답변

0

를 수정, 삭제 또는 SELECT 문 @@ ROWCOUNT는 그 진술 채워집니다 수 있습니다 후 선택 문 뒤에 SET @RowCountVariable = @@ROWCOUNT

를 추가합니다.

은 당신도 변수를 선언하고 여기에 값을 할당하면 경우에 당신이 지금 문

SELECT * FROM dbo.foo 

SELECT @@ROWCOUNT --<-- here it will show number of rows affected by select 

을 실행 말

당신이 실행 한 onec 당신이, 당신의 코드에 어느 따라서
DECLARE @Test_Var INT = 1; 

SELECT @@ROWCOUNT --<-- here @@ROWCOUNT will show you 1 

문이 있고 해당 명령문의 영향을받는 행 수에 관심이있는 경우 해당 문 다음에 변수 @@ ROWCOUNT를 저장하는 변수가옵니다.

DECLARE @rcount INT 

SELECT * FROM dbo.foo 
SELECT @rcount = @@ROWCOUNT; 

이제 어디서나이 변수를 사용할 수 있습니다. 블라디미르가 당신이 보여주고 싶은 메시지를 보여주기 위해 설명했지만, 그 시점의 @@ ROWCOUNT의 값은 변수에 안전하게 저장됩니다.

코드

DECLARE @eSubject varchar(250) 
DECLARE @emailTo varchar(250) 
SET @eSubject = 'Number of rows updated' --<-- this would have reset the value of @@ROWCOUNT to 1 
SET @emailTo = '[email protected]'   --<-- this would have reset the value of @@ROWCOUNT to 1 again 
EXEC msdb.dbo.sp_send_dbmail @[email protected], 
    @subject = @eSubject, 
    @body = @@ROWCOUNT, 
    @body_format = 'HTML'; 

업데이트

귀하의 업데이트 문

DECLARE @Rcount NVARCHAR(1000); 
UPDATE foo 
    SET Colfoo = 'foo' 

-- now use the variable to store the value 

SET @Rcount = CAST(@@ROWCOUNT AS NVARCHAR(10)) + ' row(s) affected by UPDATE'; 

SELECT @Rcount; --<-- test it 
+0

고마워요! 이것은 좋은 정보입니다.그러나이 줄에 여전히 구문 오류가 발생합니다. @body = CONVERT (VARCHAR (10), @ rcount) + 'UPDATE의 영향을받는 행' SQL에 convert (varchar 10) 조각. – BSanders

0

변경이 줄을

@body = @@ROWCOUNT + 'row(s) affected by UPDATE', 

따라서 SQL Server가 + 기호를 처리하는 방법을 알고하지 않습니다, 데이터 유형이

@body = CONVERT(varchar(10),@@ROWCOUNT) + 'row(s) affected by UPDATE', 

문제가 불일치 할 수 있습니다.

또한 @@ROWCOUNT은 최종 실행 된 명령문의 행 수만 반환합니다. 이는 SET 문입니다. 따라서 항상 1을 반환합니다.

그냥 다른 변수를 추가하고 있다는 점에서이 모든 INSERT, UPDATE 후

@body = CONVERT(varchar(10),@RowCountVariable)+ 'row(s) affected by UPDATE',