Dette skyldes, at omfanget af EXEC erklæring er forskellig fra omfanget af den indeholdende sproc. Det vil sige dit opkald til EXEC opretter den midlertidige tabel, og derefter slettes den automatisk som scope for EXEC er Venstre. Du skal grundlæggende gøre det hele inde i en EXEC erklæring:
DECLARE @sql VARCHAR(MAX)
SET @sql = 'SELECT * INTO #temp
FROM ' + @PKSchema + '.dbo.' + @PKTableName + ' WHERE 1<>1
INSERT INTO #temp ...'
EXEC(@sql)