spBulkUpdate_EmailList_QueryRecipients

Parameters

Parameter Parameter Type Mode Description
@ListID int IN
@ClearExistingData bit IN
@XML ntext IN

Definition

Copy

                CREATE     PROCEDURE [dbo].[spBulkUpdate_EmailList_QueryRecipients]
          (
              @ListID as int,
              @ClearExistingData bit,
              @XML as ntext
          )

          AS
          BEGIN
              set nocount on
              DECLARE @idoc int
              DECLARE @XMLData table(
                  USERID int
                  MailDisplay nvarchar(512) COLLATE database_default, 
                  MailAddress nvarchar(512) COLLATE database_default, 
                  OptOut bit
                  BORECID int
                  BOSYSID int,
                  QueryID int)

              --Load Up the XML into a temporary table
              EXEC sp_xml_preparedocument @idoc OUTPUT, @XML
              INSERT INTO @XMLData
              SELECT 
                  U, 
                  N, 
                  E, 
                  O, 
                  BR,
                  BS,
                  Q
              FROM OPENXML (@idoc, '/Recipients/R', 2
              WITH (
                  U int,
                  N nvarchar(512), 
                  E nvarchar(512),
                  O bit,
                  BR int,
                  BS int,
                  Q int

              )
              EXEC sp_xml_removedocument @idoc

              -- First Make sure that all of our recipients exist in the 
              -- Backoffice people table - w/out dupes

              INSERT INTO dbo.BackOfficeSystemPeople 
                  (BackOfficeSystemID, BackofficeRecordID)
              SELECT BOSYSID, BORECID 
              FROM @XMLData x1 
              WHERE NOT EXISTS (
                  SELECT *
                  FROM dbo.BackOfficeSystemPeople p
                  WHERE x1.bosysid = p.BackOfficeSystemID
                  AND x1.borecid = p.BackofficeRecordID
              )
              AND BORECID > 0

              if @ClearExistingData = 1
              begin
                  -- clear out old data
              delete from EmailList_People 
                  where EmailListID = @ListID
              end

              -- insert new data
              INSERT INTO EmailList_People(
                  EmailListID, 
                  PeopleID,
                  EmailDisplayName, 
                  EmailAddress,
                  QueryID,
                  GlobalOptOut)
              SELECT 
                  @ListID
                  p.[id],
                  MailDisplay, 
                  MailAddress, 
                  QueryID,
                  OptOut
              FROM @XMLData x1 
              left outer join dbo.BackOfficeSystemPeople p
              on x1.bosysid = p.BackOfficeSystemID and
              x1.borecid = p.BackofficeRecordID


          END