2017-02-21 97 views
0

我有一个票据数据库,我正在编写一个存储过程来提醒我的团队的每个成员,如果他们有任何打开的票证。需要循环的T-SQL帮助

我有选择查询来查找当天打开的门票。我必须按照用户名将票分组,并向每个人发送电子邮件。 (例如,如果我的队列中有3张门票打开,我想建立一张桌子并向我发送3行而不是3封电子邮件。)

请指导我应该查找哪些功能/关键字以循环遍历团队的每个成员。我正在查看While循环,但无法看到它对我有多大帮助。

我的想法到目前为止是创建一个表变量来填充必要的数据。

在一个循环中,

Select blah blah WHERE user = @user 

TSQL - 建立一个HTML表格发送电子邮件至@user

我被困在如何遍历每个用户!任何帮助,将不胜感激

+0

大多数循环通常通过'游标'或'while'循环完成。看看这两种方法的文档。 https://msdn.microsoft.com/en-us/library/ms180169.aspx,https://msdn.microsoft.com/en-us//library/ms178642.aspx – tarheel

+0

@SeanLange是的,我做到了。使用光标,我可以选择daya的所有打开的门票并发送电子邮件给相应的人。但是,如果队列中有多张门票,我可以根据受让人将门票分组在一起发送一封电子邮件而不是多封电子邮件吗?如果我们可以通过光标做到这一点,让我知道。我会进一步调查。谢谢! – Ramya

+0

当然你可以轻松做到这一点。您想要发送一张单曲给拥有3张开放门票的UserX,并且内容将包含所有开放门票的详细信息吗?每次通过光标进行迭代时,您都在运行查询以获取该人员的详细信息。这从这里看起来很简单。你有什么问题? –

回答

2
declare @user as table (username varchar(10) , email varchar (20)) 
declare @ticket as table (username varchar(10) , ticketnumber varchar (20)) 
insert into @user values('A','a.com') 
insert into @user values('b','b.com') 

insert into @ticket values('A','t1') 
insert into @ticket values('A','t2') 
insert into @ticket values('b','t3') 

declare @ticketNumber as varchar(100) 
declare @userName as varchar(100) 
declare @user_cursor cursor 
declare @inner_cursor cursor 
declare @fetch_user_cursor int 
declare @fetch_inner_cursor int 

declare user_cursor cursor static local for 
SELECT 
     username 
    FROM @user 

    /*loop through top level cursor*/ 
    open user_cursor 
    fetch next from user_cursor into @userName 
    select @fetch_user_cursor = @@FETCH_STATUS 

    while @fetch_user_cursor = 0 
    begin 
    print @userName 

    /*loop through second level cursor*/ 
    set @inner_cursor = cursor static local for 
    select ticketnumber from @ticket where username = @userName 


    open @inner_cursor 
    fetch next from @inner_cursor into @ticketNumber 
    set @fetch_inner_cursor = @@FETCH_STATUS 
    while @fetch_inner_cursor = 0 
    begin 

     print @ticketNumber 

     fetch next from @inner_cursor into @ticketNumber 
     set @fetch_inner_cursor = @@FETCH_STATUS 
    end 
    close @inner_cursor 
    deallocate @inner_cursor 

    fetch next from user_cursor into @userName 
    set @fetch_user_cursor = @@FETCH_STATUS 


    end 
+0

如果您打印了声明,您可以在电子邮件中创建您需要的html结构。我发布了您的问题所需的最小答案 –

+0

让我试试您的解决方案。感谢您的快速帮助! – Ramya

+0

@Ramya欢迎您我希望您能解决您的问题并接受我的回答 –