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