介绍
碰到过一个需求,需要查询指定人后群发邮,所以要拼接邮件的接收人,因为可以公用所以封装成存储过程。
因为游标查询的语句是动态,所以可以这样处理,将声明游标和查询语句拼接出来后再一起用 EXEC sp_executesql 函数执行,最后没有去掉拼接的分号因为邮箱可以识别,其他的拼接也可以用这个例子进行演化。
创建存储过程
CREATE PROCEDURE proc_JointReceiver
(
@sql nvarchar(400),
@Receiver nvarchar(400) OUTPUT
)
AS
BEGIN
DECLARE @Result nvarchar(400) = ''
DECLARE @User nvarchar(100)
SET @sql = 'DECLARE Cur_Joint CURSOR FOR '+ @sql
EXEC sp_executesql @sql
OPEN Cur_Joint
FETCH NEXT FROM Cur_Joint INTO @User
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Result += @User + ';'
FETCH NEXT FROM Cur_Joint INTO @User
END
CLOSE Cur_Joint
DEALLOCATE Cur_Joint
SET @Receiver = @Result
END
调用
declare @Receiver nvarchar(max)
exec proc_JointReceiver 'select Email from User ',@Receiver output
select @Receiver