CREATE PROCEDURE XMLATTRPOS_Int_COUNT_test @str xml,
@retdata bit = 1,
@tookms int = NULL OUTPUT AS
DECLARE @start datetime2(3)
SELECT @start = sysdatetime()
DECLARE @no_of_elem int = @str.query('count(/Root/Num)').value('.', 'int');
DECLARE @cnt bigint
SELECT @cnt = SUM(len(word))
FROM Numbers n
CROSS APPLY (usrdictwords u
JOIN @str.nodes('(/Root/Num)[sql:column("n.Number")]') AS T(Item)
ON u.wordno = T.Item.value('@num[1]', 'int'))
WHERE n.Number <= @no_of_elem
SELECT @tookms = datediff(ms, @start, sysdatetime());
go
CREATE PROCEDURE XMLATTRPOS_Int_JOIN_test @str xml,
@retdata bit = 1,
@tookms int = NULL OUTPUT AS
DECLARE @start datetime2(3)
SELECT @start = sysdatetime()
DECLARE @no_of_elem int = @str.query('count(/Root/Num)').value('.', 'int');
INSERT #Int_JOIN (word)
SELECT u.word
FROM Numbers n
CROSS APPLY (usrdictwords u
JOIN @str.nodes('(/Root/Num)[sql:column("n.Number")]') AS T(Item)
ON u.wordno = T.Item.value('@num[1]', 'int'))
WHERE n.Number <= @no_of_elem
SELECT @tookms = datediff(ms, @start, sysdatetime());
IF @retdata = 1 SELECT word FROM #Int_JOIN
TRUNCATE TABLE #Int_JOIN
go
CREATE PROCEDURE XMLATTRPOS_Int_UNPACK_test @str xml,
@retdata bit = 1,
@tookms int = NULL OUTPUT AS
DECLARE @start datetime2(3)
SELECT @start = sysdatetime()
DECLARE @no_of_elem int = @str.query('count(/Root/Num)').value('.', 'int')
INSERT #Int_UNPACK (number)
SELECT n = T.Item.value('@num[1]', 'int')
FROM Numbers n
CROSS APPLY @str.nodes('(/Root/Num)[sql:column("n.Number")]') AS T(Item)
WHERE n.Number <= @no_of_elem
SELECT @tookms = datediff(ms, @start, sysdatetime());
IF @retdata = 1 SELECT number FROM #Int_UNPACK
TRUNCATE TABLE #Int_UNPACK
go
CREATE PROCEDURE XMLATTRPOS_Str_COUNT_test @str xml,
@retdata bit = 1,
@tookms int = NULL OUTPUT AS
DECLARE @start datetime2(3)
SELECT @start = sysdatetime()
DECLARE @no_of_elem int = @str.query('count(/Root/Word)').value('.', 'int');
DECLARE @cnt bigint
SELECT @cnt = SUM(len(guid))
FROM Numbers n
CROSS APPLY (@str.nodes('(/Root/Word)[sql:column("n.Number")]') AS T(Item)
JOIN usrdictwords u ON u.word = T.Item.value('@Item[1]', 'nvarchar(50)'))
WHERE n.Number <= @no_of_elem
SELECT @tookms = datediff(ms, @start, sysdatetime());
go
CREATE PROCEDURE XMLATTRPOS_Str_JOIN_test @str xml,
@retdata bit = 1,
@tookms int = NULL OUTPUT AS
DECLARE @start datetime2(3)
SELECT @start = sysdatetime()
DECLARE @no_of_elem int = @str.query('count(/Root/Word)').value('.', 'int');
INSERT #Str_JOIN (wordno, guid)
SELECT u.wordno, u.guid
FROM Numbers n
CROSS APPLY (@str.nodes('(/Root/Word)[sql:column("n.Number")]') AS T(Item)
JOIN usrdictwords u ON u.word = T.Item.value('@Item[1]', 'nvarchar(50)'))
WHERE n.Number <= @no_of_elem
SELECT @tookms = datediff(ms, @start, sysdatetime());
IF @retdata = 1 SELECT wordno FROM #Str_JOIN
TRUNCATE TABLE #Str_JOIN
go
CREATE PROCEDURE XMLATTRPOS_Str_UNPACK_test @str xml,
@retdata bit = 1,
@tookms int = NULL OUTPUT AS
DECLARE @start datetime2(3)
SELECT @start = sysdatetime()
DECLARE @no_of_elem int = @str.query('count(/Root/Word)').value('.', 'int')
INSERT #Str_UNPACK (word)
SELECT word = T.Item.value('@Item[1]', 'nvarchar(50)')
FROM Numbers n
CROSS APPLY @str.nodes('(/Root/Word)[sql:column("Number")]') AS T(Item)
WHERE n.Number <= @no_of_elem
SELECT @tookms = datediff(ms, @start, sysdatetime());
IF @retdata = 1 SELECT word FROM #Str_UNPACK
TRUNCATE TABLE #Str_UNPACK
go