Mostrando entradas con la etiqueta tokens. Mostrar todas las entradas
Mostrando entradas con la etiqueta tokens. Mostrar todas las entradas

lunes, 4 de febrero de 2008

Cambio de sintaxis en los SQL Agent Tokens

A partir de SP1 los tokens incluidos en trabajos necesitan macros de escape. Si intentáis lanzar el trabajo que incluya tokens aparece´ra el siguiente error :


The job step contains one or more tokens. For SQL Server 2005 Service Pack 1 or later versions, all job steps with tokens must be updated with a macro before the job can run.


En el KB 915845 tenéis más detalles

Así pues, en vez de $(A-MSG) vendría a ser algo como $(ESCAPE_NONE(A-MSG)

Otroo ejemplo; por ejemplo utilizáis

SET @err =REPLACE("$(A-MSG)", '''','')

Debería ser cambiado a

SET @err ='$(ESCAPE_SQUOTE(A-MSG))'

Para compensar en parte el engorro de este cambio Microsoft facilita un sp (sp_AddEscapeNoneToJobStepTokens )que automáticamente adapta los trabajos existentes a la nueva sintaxis. Como su nombre indica, sólo añada el macro de Escape_None, ojo

El script lo tenéis hacia el final en el KB arriba indicado

lunes, 17 de diciembre de 2007

SQL Server Agent Tokens

Los token son de gran utilidad y sin embargo su uso no es tan generalizado como debiera. En el siguiente enlace tenéis muy buena información sobre ellos. A partir de Ms SQL 2005 Microsoft
incluye xp_smtp_sendmail como correo por defecto. Asimismo ofrece la posibilidad de usar de una manera fácil los tokens del Agente para enviar información personalizada de los errores.

Pero para las versiones 7 y 2000, aún hay que seguir usando una 'manera más artesanal'. Aquí os pongo un ejemplo que utilizo para notificar errores en jobs o alertas que tengo configuradas (otro día comentaré algo sobre ellas)



declare @msg varchar(4000)
declare @srvr varchar(80)

set @srvr = '[SRVR] Error on [A-DBN]'

set @msg = ' Error on [SRVR]' + char(10)
set @msg = @msg + 'Error: [A-ERR]' +char(10)
set @msg = @msg + 'Date: [STRTDT], Time: [STRTTM]' + CHAR(10)
set @msg = @msg + 'Database: [A-DBN]' + CHAR(10)
set @msg = @msg + 'Message: ' + REPLACE("[A-MSG]", '''','') + CHAR(10) + CHAR(10)
set @msg = @msg + 'Please, verify Error Log for details'

exec master.dbo.xp_smtp_sendmail @From=N'dbalert@domain.com',
@to=N'sqlast@sqlast.com',
@Subject=@srvr ,
@Message= @msg ,
@server=N'emailserver.com'