4

私はAngelLMSを使用しており、SQLServerプラットフォーム上に構築されています。私はその2005年を信じていますが、それについて100%確信しているわけではありません。

とにかく、多分私の擬似コードはその答えに光を当てるでしょう。また、文字列には一重引用符を使用する必要があり、連結文字は+です。

1日に2〜5回何かを実行する必要があります(頻度はまだ決定されていませんが、ポイントはわかります)。トランザクションブロック/擬似コードは次のとおりです。

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

データベースへの私の唯一のアクセスは、SQLコマンドを実行するテキストボックスです。テーブルの作成と削除、トランザクションブロックの実行、そして明らかに選択/挿入/更新/削除を行うことができます。エージェントを作成するためのコマンドが見つかりませんが、EnterpriseManagerまたはGUIが呼び出されているものを使用している場合の手順のみが見つかります。

また、エージェントのタイミングスケジュールを操作する方法に関するいくつかのリファレンスが役立ちます。テストするときは、15分程度ごとに実行するように設定したいと思います。


EDIT
EXEC dbo.sp_add_job @ job_name =N'test'はエラーを返しました
。ストアドプロシージャ'dbo.sp_add_job'が見つかりませんでした。

4

2 に答える 2

11

SQL ServerエージェントでSQLジョブを作成する必要がある場合(権限がある場合)、次を作成する必要があります。

1)ジョブ自体2)SQLコードを実行するためのジョブのステップ3)いつ実行するかのスケジュール。

これを行うには、次のストアドプロシージャが必要です(実例)。

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

sproc自体については、ここで構文を確認する必要があります。

sp_add_job

sp_add_jobstep

sp_add_jobschedule

少し注意が必要ですが、それでうまくいくはずです。

于 2009-08-25T22:54:49.343 に答える
1

まず、SQLExpressにはSQLAgent機能がないため、SQLServerがExpressEditionであるかどうかを確認する必要があります。

コマンドウィンドウで、次のコマンドを実行します。

SELECT @@version

結果には、エディションに関する情報が含まれます。

Expressを使用している場合は、コマンドを実行する別の方法を見つける必要があります。たとえば、 SQLCMDとWindowsスケジューラを使用するか、SQLExpressのSQLAgentをサードパーティで置き換えたものの1つを使用します(Googleの「sqlexpressエージェント」の場合)。あなたはいくつかを見つけるでしょう。経験がないのでお勧めできません。

StandardエディションまたはEnterpriseエディションを使用している場合、T-SQLを使用してSQLエージェントジョブを作成する手順については、こちらをご覧ください

于 2009-08-25T21:26:58.023 に答える