2017-02-21 156 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歡迎您我希望您能解決您的問題並接受我的回答 –