CREATE PROCEDURE XMLELEM$OPEN_Int_JOIN_test @str nvarchar(MAX),
                                            @tookms int OUTPUT AS

   DECLARE @start datetime,
           @idoc  int,
           @err   int

   SELECT @start = getdate()

   EXEC  @err = sp_xml_preparedocument @idoc output, @str
   SELECT @err = @@error + coalesce(@err, 4711)
   IF @err <> 0 RETURN @err

   INSERT Int_JOIN(word)
SELECT u.word
   FROM   usrdictwords u
   JOIN   OPENXML(@idoc, '/Root/Num', 2)
          WITH (num int) AS a ON u.wordno = a.num

   EXEC sp_xml_removedocument @idoc

   SELECT @tookms = datediff(ms, @start, getdate());

   SELECT word FROM Int_JOIN
   TRUNCATE TABLE Int_JOIN
go


CREATE PROCEDURE XMLELEM$OPEN_Int_UNPACK_test @str    nvarchar(MAX),
                                              @tookms int OUTPUT AS

   DECLARE @start datetime,
           @idoc  int,
           @err   int
   SELECT @start = getdate()

   EXEC  @err = sp_xml_preparedocument @idoc OUTPUT, @str
   SELECT @err = @@error + coalesce(@err, 4711)
   IF @err <> 0 RETURN @err

   INSERT Int_UNPACK(number)
SELECT num
   FROM   OPENXML(@idoc, '/Root/Num', 2)
          WITH (num int)
   EXEC sp_xml_removedocument @idoc

   SELECT @tookms = datediff(ms, @start, getdate());

   SELECT number FROM Int_UNPACK
   TRUNCATE TABLE Int_UNPACK
go


CREATE PROCEDURE XMLELEM$OPEN_Str_JOIN_test @str    nvarchar(MAX),
                                       @tookms int OUTPUT AS

   DECLARE @start datetime,
           @idoc  int,
           @err   int
   SELECT @start = getdate()

   EXEC  @err = sp_xml_preparedocument @idoc output, @str
   SELECT @err = @@error + coalesce(@err, 4711)
   IF @err <> 0 RETURN @err

   INSERT Str_JOIN(wordno, guid)
SELECT u.wordno, u.guid
   FROM   usrdictwords u
   JOIN   OPENXML(@idoc, '/Root/Word', 2)
          WITH (Item nvarchar(50)) AS a ON u.word = a.Item

   EXEC sp_xml_removedocument @idoc

   SELECT @tookms = datediff(ms, @start, getdate());

   SELECT wordno FROM Str_JOIN

   TRUNCATE TABLE Str_JOIN
go


CREATE PROCEDURE XMLELEM$OPEN_Str_UNPACK_test @str    nvarchar(MAX),
                                         @tookms int OUTPUT AS

   DECLARE @start datetime,
           @idoc  int,
           @err   int

   SELECT @start = getdate()

   EXEC  @err = sp_xml_preparedocument @idoc output, @str
   SELECT @err = @@error + coalesce(@err, 4711)
   IF @err <> 0 RETURN @err

   INSERT Str_UNPACK(word)
SELECT Item
   FROM   OPENXML(@idoc, '/Root/Word', 2)
          WITH (Item nvarchar(50))

   EXEC   sp_xml_removedocument @idoc
   SELECT @tookms = datediff(ms, @start, getdate());

   SELECT word FROM Str_UNPACK

   TRUNCATE TABLE Str_UNPACK
go