SQLServer 的动态拼接

来源:这里教程网 时间:2026-03-02 10:42:25 作者:
ALTER  procedure [dbo].[p_mon_auto_job2]
@monitor_ip varchar(20),
@monitor_db varchar(20),
@dbip      varchar(20),
@db_name   varchar(20),
@alert_level varchar(8)
as 
begin
     ----定义接收原先存储过程变量
    declare   @proc_name varchar(100)
declare   @sql  nvarchar(max)


/*
    declare   @dbname varchar(100)
    declare   @dbip varchar(100)


set @dbip=@@SERVERNAME
set @dbname=DB_NAME()
*/

select a.procname,a.status,a.alert_level  into  #T_MONITOR_TASK from [hxerp1].monitordb.dbo.T_MONITOR_TASK a 
where a.alert_level=@alert_level and a.status='启用'
 
    
----定义游标,用于取procname的值
    declare   get_proc_name_cur cursor for  select procname  from  #T_MONITOR_TASK a where a.alert_level=@alert_level and a.status='启用' 
 
----打开游标
open get_proc_name_cur


----给变量赋值
fetch  next  from  get_proc_name_cur into  @proc_name


---循环取值
while @@FETCH_STATUS=0
 begin
    
---拼接存储过程
set @sql=N'exec '+@proc_name+' '+''''+@monitor_ip+''''+','+''''+@monitor_db+''''+','+''''+@dbip+''''+','+''''+@db_name+''''  --恶心
---用于执行巡检的存储过程
    exec sp_executesql @sql
---print @sql
---赋新的值给变量
fetch  next  from  get_proc_name_cur into  @proc_name
 end


 -----释放游标资源
deallocate  get_proc_name_cur
end

相关推荐