CREATE PROCEDURE XMLATTR$STR_Int_JOIN_test @str    nvarchar(MAX),
                                           @tookms int OUTPUT AS

DECLARE @start datetime,
        @xmla  xml
SELECT @start = getdate()

SELECT @xmla = @str

INSERT Int_JOIN(word)
SELECT u.word
FROM   usrdictwords u
JOIN   @xmla.nodes('/Root/Num') AS T(Item)
  ON   u.wordno = T.Item.value('@num', 'int')

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

SELECT word FROM Int_JOIN

TRUNCATE TABLE Int_JOIN
go


CREATE PROCEDURE XMLATTR$STR_Int_UNPACK_test @str    nvarchar(MAX),
                                             @tookms int OUTPUT AS

DECLARE @start datetime,
        @xmla  xml
SELECT @start = getdate()

SELECT @xmla = @str

INSERT Int_UNPACK(number)
SELECT n = T.Item.value('@num', 'int')
FROM   @xmla.nodes('/Root/Num') AS T(Item)

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

SELECT number FROM Int_UNPACK

TRUNCATE TABLE Int_UNPACK
go


CREATE PROCEDURE XMLATTR$STR_Str_JOIN_test @str    nvarchar(MAX),
                                           @tookms int OUTPUT AS

   DECLARE @start datetime,
           @xmla  xml
   SELECT @start = getdate()

   SELECT @xmla = @str

   INSERT Str_JOIN(wordno, guid)
SELECT u.wordno, u.guid
   FROM   usrdictwords u
   JOIN   @xmla.nodes('/Root/Word') AS T(Item)
     ON   u.word = T.Item.value('@Item', 'nvarchar(50)')

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

   SELECT wordno FROM Str_JOIN

   TRUNCATE TABLE Str_JOIN
go


CREATE PROCEDURE XMLATTR$STR_Str_UNPACK_test @str    nvarchar(MAX),
                                                 @tookms int OUTPUT AS

   DECLARE @start datetime,
           @xmla  xml
   SELECT @start = getdate()

   SELECT @xmla = @str

   INSERT Str_UNPACK(word)
SELECT word = T.Item.value('@Item', 'nvarchar(50)')
   FROM   @xmla.nodes('/Root/Word') AS T(Item)

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

   SELECT word FROM Str_UNPACK

   TRUNCATE TABLE Str_UNPACK
go