CREATE PROCEDURE MANYSELECT_Int_JOIN_test
                 @str    nvarchar(MAX),
                 @tookms int OUTPUT AS

DECLARE @start datetime

CREATE TABLE #manyintjoin (number int NOT NULL)

SELECT @start = getdate()

EXEC unpack_with_manyselect @str, '#manyintjoin'

INSERT Int_JOIN(word)
SELECT u.word
FROM   usrdictwords u
JOIN   #manyintjoin m ON u.wordno = m.number


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

SELECT word FROM Int_JOIN
TRUNCATE TABLE Int_JOIN
go


CREATE PROCEDURE MANYSELECT_Int_UNPACK_test
                 @str    nvarchar(MAX),
                 @tookms int OUTPUT AS

DECLARE @start datetime

CREATE TABLE #manyintunpack (number int NOT NULL)

SELECT @start = getdate()

EXEC unpack_with_manyselect @str, '#manyintunpack'

INSERT Int_UNPACK(number)
SELECT number
FROM   #manyintunpack


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

SELECT number FROM Int_UNPACK
TRUNCATE TABLE Int_UNPACK
go


CREATE PROCEDURE MANYSELECT_Str_JOIN_test
                 @str    nvarchar(MAX),
                 @tookms int OUTPUT AS

DECLARE @start datetime

CREATE TABLE #manystrjoin (str nvarchar(50) COLLATE database_default NOT NULL)

SELECT @start = getdate()

EXEC unpackstr_with_manyselect @str, '#manystrjoin'

INSERT Str_JOIN(wordno, guid)
SELECT u.wordno, u.guid
FROM   usrdictwords u
JOIN   #manystrjoin l ON l.str = u.word

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

SELECT wordno FROM Str_JOIN

TRUNCATE TABLE Str_JOIN
go


CREATE PROCEDURE MANYSELECT_Str_UNPACK_test
                 @str    nvarchar(MAX),
                 @tookms int OUTPUT AS

DECLARE @start datetime

CREATE TABLE #manystrunpack (str nvarchar(50) COLLATE database_default NOT NULL)

SELECT @start = getdate()

EXEC unpackstr_with_manyselect @str, '#manystrunpack'

INSERT Str_UNPACK(word)
SELECT str
FROM   #manystrunpack

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

SELECT word FROM Str_UNPACK

TRUNCATE TABLE Str_UNPACK
go