CREATE PROCEDURE XMLATTR_Int_JOIN_test @str    xml,
                                       @tookms int OUTPUT AS

DECLARE @start datetime
SELECT @start = getdate()

INSERT Int_JOIN(word)
SELECT u.word
FROM   usrdictwords u
JOIN   @str.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_Int_UNPACK_test @str    xml,
                                         @tookms int OUTPUT AS

DECLARE @start datetime
SELECT @start = getdate()

INSERT Int_UNPACK(number)
SELECT n = T.Item.value('@num', 'int')
FROM   @str.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_JOIN_test @str    xml,
                                       @tookms int OUTPUT AS

DECLARE @start datetime
SELECT @start = getdate()

INSERT Str_JOIN(wordno, guid)
SELECT u.wordno, u.guid
FROM   usrdictwords u
JOIN   @str.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_UNPACK_test @str    xml,
                                         @tookms int OUTPUT AS

DECLARE @start datetime
SELECT @start = getdate()

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

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

SELECT word FROM Str_UNPACK

TRUNCATE TABLE Str_UNPACK
go