sqlserver数据库异步处理的存储过程

CREATE Procedure AsynchronousInvoking
 @EXECSQL nvarchar(4000)
AS

BEGIN TRANSACTION           
  DECLARE @JobID BINARY(16) 
  DECLARE @ReturnCode INT   
  SELECT @ReturnCode = 0    

BEGIN

  EXECUTE @ReturnCode = msdb.dbo.sp_add_job @job_id = @JobID OUTPUT ,
     @job_name = N'temp_sqljob',
     @owner_login_name = N'',
     @description = N'description for job',
     @category_name = N'[Uncategorized (Local)]',
     @enabled = 1,
     @notify_level_email = 0,
     @notify_level_page = 0,
     @notify_level_netsend = 0,
     @notify_level_eventlog = 0,
     @delete_level= 3
    
  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback


  EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID,
     @step_id = 1,
     @step_name = N'step1',
     @command = @EXECSQL,
     @database_name = N'master',
     @server = N'',
     @database_user_name = N'',
     @subsystem = N'TSQL',
     @cmdexec_success_code = 0,
     @flags = 0,
     @retry_attempts = 0,
     @retry_interval = 0,
     @output_file_name = N'',
     @on_success_step_id = 0,
     @on_success_action = 1,
     @on_fail_step_id = 0,
     @on_fail_action = 2
    
  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback


  EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID,
              @start_step_id = 1

  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
 

  EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID,
          @server_name = N'(local)'
         
  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
 
END

COMMIT TRANSACTION         
GOTO   EndSave             

QuitWithRollback:
  IF (@@TRANCOUNT > 0) BEGIN
    ROLLBACK TRANSACTION
    RETURN 1
  END
EndSave:

EXEC @ReturnCode = msdb.dbo.sp_start_job @job_id = @JobID
 
RETURN @ReturnCode


GO
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server 支持异步执行存储过程的方式,可以通过以下步骤实现: 1. 创建存储过程:首先需要创建一个存储过程,可以使用 T-SQLSQL Server Management Studio 来创建。 2. 创建 SqlCommand 对象:在应用程序,需要创建一个 SqlCommand 对象来执行存储过程。可以使用 SqlCommand 的 BeginExecuteNonQuery 或 BeginExecuteReader 方法来启动异步执行。 3. 定义回调函数:在异步执行完成后,需要定义一个回调函数来处理执行结果。可以使用 AsyncCallback 委托类型来定义回调函数。 4. 执行异步操作:使用 BeginExecuteNonQuery 或 BeginExecuteReader 方法执行异步操作,并指定回调函数。 下面是一个示例代码: ``` using System; using System.Data.SqlClient; namespace AsyncSP { class Program { static void Main(string[] args) { string connString = "Data Source=(local);Initial Catalog=TestDB;Integrated Security=True"; SqlConnection connection = new SqlConnection(connString); SqlCommand command = new SqlCommand("dbo.MyStoredProcedure", connection); command.CommandType = System.Data.CommandType.StoredProcedure; AsyncCallback callback = new AsyncCallback(HandleCallback); IAsyncResult result = command.BeginExecuteNonQuery(callback, command); Console.WriteLine("Executing stored procedure asynchronously..."); Console.ReadLine(); } static void HandleCallback(IAsyncResult result) { SqlCommand command = (SqlCommand)result.AsyncState; command.EndExecuteNonQuery(result); Console.WriteLine("Stored procedure completed."); } } } ``` 在上面的示例,我们创建了一个 SqlConnection 对象和一个 SqlCommand 对象,并指定了要执行存储过程的名称和类型。然后,我们定义了一个回调函数 HandleCallback 来处理执行结果。最后,我们使用 BeginExecuteNonQuery 方法执行异步操作,并指定回调函数。在回调函数,我们使用 EndExecuteNonQuery 方法来获取执行结果。 需要注意的是,异步执行存储过程可能会对数据库服务器的性能产生影响,因此需要谨慎使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值