EA7_spGetNewSurveyResponses

Definition

Copy

                CREATE  PROCEDURE [dbo].[EA7_spGetNewSurveyResponses]
                as
                begin
                    set nocount on

                    declare @surveys table (id         integer,
                                            Title     nvarchar(256) COLLATE database_default)
                    declare @surveyResponses table(
                        SiteSurveysId    integer,
                        ResponseId        integer,
                        EEId        integer,
                        DateAdded        datetime
                    )

                    -- list of Surveys answered by EE Users
                    insert into @surveys(id)
                    select distinct a.SiteSurveysId 
                    from dbo.SiteSurveyResponses a
                    inner join dbo.SiteSurveys c on a.SiteSurveysId = c.Id
                    where dbo.fnGetEEIDFromLinkedUserID(a.ClientUsersId) > 0
                    and a.EEProcessed = 0 

                    update @surveys
                    set Title = case when len(a.Title) > 0 then a.Title else c.title end
                    from dbo.SiteSurveys a
                    inner join @surveys b on a.id = b.id
                    inner join dbo.SiteContent c on a.id = c.id

                    -- result set 1 - Survey Responses delete transactions
                    -- convert the date to yyyy-mm-dd hh:mi:ss.mmm format that will work 
                    -- across US and UK databases
                    select s.SiteSurveysId 'id', s.ClientSitesId 'cid', convert(char(23), s.DeleteDate, 121) 'dt'
                    from dbo.SiteSurveyResponsesDeleteTransactions s
                    for XML AUTO

                    -- result set 2 - Surveys
                    select s.ID 'ID', s.Title 'Title'
                    from @surveys s
                    order by s.ID 
                    for XML AUTO

                    -- result set 3 - Survey Questions
                    select q.SiteSurveysId 'sid', q.ID 'qid', IsNull(q.Question, '') 'q', q.Sequence 'seq'
                    from dbo.SiteSurveyQuestions q
                    inner join @surveys b on q.SiteSurveysId = b.ID
                    order by q.SiteSurveysId, q.ID 
                    for XML AUTO

                    -- result set 4 - Survey Answers 
                    select a.SiteSurveyQuestionsId 'qid', a.ID 'aid', a.Answer 'a'
                    from dbo.SiteSurveyAnswers a
                    inner join dbo.SiteSurveyQuestions b on a.SiteSurveyQuestionsId = b.ID
                    inner join @surveys c on b.SiteSurveysId = c.id
                    order by a.SiteSurveyQuestionsId, a.ID
                    for XML AUTO

                    -- result set 5 - Survey Answer Columns
                    select c.SiteSurveyQuestionsId 'qid', c.ID 'cid', c.ColumnName 'c'
                    from dbo.SiteSurveyAnswerColumns c
                    inner join dbo.SiteSurveyQuestions b on c.SiteSurveyQuestionsId = b.ID
                    inner join @surveys d on b.SiteSurveysId = d.id
                    order by c.SiteSurveyQuestionsId, c.ID
                    for XML AUTO

                    insert into @surveyResponses (SiteSurveysId, ResponseId, EEId, DateAdded)
                    select a.SiteSurveysId, a.ID, dbo.fnGetEEIDFromLinkedUserID(a.ClientUsersId), a.DateAdded
                    from dbo.SiteSurveyResponses a
                    inner join @surveys b on a.SiteSurveysId = b.ID
                    where dbo.fnGetEEIDFromLinkedUserID(a.ClientUsersId) > 0
                    and a.EEProcessed = 0 

                    -- result set 6 - Survey Responses
                    select SiteSurveysId 'sid', ResponseId 'rpid', EEId 'eeid', convert(char(23), DateAdded, 121) 'dt'
                    from @surveyResponses rp
                    order by SiteSurveysId
                    for XML AUTO

                    -- result set 7 - Survey Results
                    select r.id 'id', r.SiteSurveyResponsesId 'rpid', r.SiteSurveyAnswersId 'aid'
                    r.SiteSurveyAnswerColumnsId 'cid'
                    case when (IsNumeric(r.AnswerValue)=1 and r.SiteSurveyAnswerColumnsId>0) then d.Data else r.AnswerValue end 'value'
                    from dbo.SiteSurveyResults r
                    inner join @surveyResponses b on r.SiteSurveyResponsesId = b.ResponseId
                    left outer join dbo.SiteSurveyAnswerColumnData d on Convert(nvarchar(50),d.Id) = r.AnswerValue
                    order by r.SiteSurveyResponsesId
                    for XML AUTO
                end