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