Pregunta

Estoy usando Angel LMS y está construido en una plataforma SQL Server. Creo que es 2005, pero no 100% seguro de eso.

De todos modos, tal vez mi pseudocódigo arrojará luz sobre esa respuesta. También se deben usar citas individuales para cadenas y el carácter concatenado es +.

Necesito que algo se ejecute 2-5 veces al día (la frecuencia aún no está determinada, pero se entiende). Aquí está el bloque de transacciones/pseudo-código:

BEGIN TRANSACTION
BEGIN TRY

<select statement>
<update statement>
<delete statement>
<insert statement>

COMMIT TRANSACTION
END TRY
BEGIN CATCH
        ROLLBACK TRANSACTION
        DECLARE @Msg NVARCHAR(MAX)  
        SELECT @Msg=ERROR_MESSAGE() 
        RAISERROR('Error Occured: %s', 20, 101,@msg) WITH LOG
END CATCH

Mi único acceso a la base de datos es un cuadro de texto que ejecuta comandos SQL. Puedo crear y soltar tablas, ejecutar bloques de transacciones y obviamente seleccionar/insertar/actualizar/eliminar. No puedo encontrar ningún comando para crear un agente, sino solo los pasos si está utilizando el administrador de empresas o como se llame la GUI.

Además, alguna referencia sobre cómo manipular el cronograma de tiempo del agente ayudaría. Cuando lo pruebo, quiero configurarlo para ejecutar cada quince minutos más o menos.


EDITAR
Ejecut dbo.sp_add_job @trabajo_name = n'test 'devolvió el error
No se pudo encontrar el procedimiento almacenado 'dbo.sp_add_job'.

¿Fue útil?

Solución

Si necesita crear un trabajo SQL en el agente SQL Server (suponiendo que tenga derechos), debe crear lo siguiente:

1) El trabajo en sí 2) un paso en el trabajo para ejecutar el código SQL 3) un horario de cuándo ejecutarlo.

Los siguientes procedimientos almacenados son necesarios para hacer esto (ejemplo de trabajo):

BEGIN TRY
    BEGIN TRAN

    DECLARE @jobId BINARY(16)

    --Add job
    EXEC msdb.dbo.sp_add_job @job_name=N'Job Name', @job_id = @jobId OUTPUT

    --Add step to job
    EXEC msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Do SQL Stuff', 
            @step_id=1, 
            @subsystem=N'TSQL', 
            @command=N'SELECT ''Hello, I am a query'';', 
            @database_name=N'DB_Name', 
            @flags=0

    --Add schedule to job
    EXEC msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'Mon-Fri 6:00AM to 7:00PM, every hour', 
            @freq_type=8, 
            @freq_interval=62, 
            @freq_subday_type=8, 
            @freq_subday_interval=1, 
            @freq_relative_interval=0, 
            @freq_recurrence_factor=1, 
            @active_start_date=20090403, 
            @active_end_date=99991231, 
            @active_start_time=60000, 
            @active_end_time=190000

    COMMIT TRAN
END TRY
BEGIN CATCH
    SELECT ERROR_Message(), ERROR_Line();
    ROLLBACK TRAN
END CATCH

En cuanto a los propios sprocs, querrás ver la sintaxis aquí:

sp_add_job

sp_add_jobstep

sp_add_jobschedule

Es un poco complicado, pero eso debería ponerte en marcha.

Otros consejos

En primer lugar, debe establecer si el servidor SQL es Express Edition, ya que SQL Express no tiene funcionalidad de agente SQL.

En su ventana de comando, ejecute el siguiente comando:

SELECT @@version

El resultado incluirá información sobre la edición.

Si tiene Express, deberá encontrar otra forma de ejecutar sus comandos, posiblemente usando Sqlcmd y el programador de Windows, o uno de los varios reemplazos de terceros para el agente SQL en SQL Express: si Google "SQL Express Agent", encontrará varios. No tengo experiencia con ellos, así que no puedo recomendar uno.

Si tiene ediciones Standard o Enterprise, se pueden encontrar los pasos para crear trabajos de agente SQL a través de T-SQL aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top