You can check for the existence of an identity column and then exclude it from the insert list as well as not altering the temp table definition
The insert statement into ##TMPTBL1 also needs to be changed
DECLARE @IDENTCOL as VARCHAR(50)
select @IDENTCOL = isnull(c.[name],'TAB_ID_MARKER ')
FROMsys.columns AS c
INNER JOIN
sys.tables AS t
ON t.[object_id] = c.[object_id]
where t.[name] = @TABLE_NAME
and c.is_identity = 1
DECLARE STRUCTURE SCROLL CURSOR FOR
SELECT COLUMN_NAME,DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS (NOLOCK)
WHERE TABLE_NAME=@TABLE_NAME
AND COLUMN_NAME <> @IDENTCOL
ORDER BY ORDINAL_POSITION ASC
if @IDENTCOL = 'TAB_ID_MARKER'
BEGIN
SELECT @CMD='SELECT * INTO ##TEMP_TABLE FROM '+@TABLE_NAME+'
ALTER TABLE ##TEMP_TABLE ADD TAB_ID_MARKER INT IDENTITY(1,1)'
END
ELSE
BEGIN
SELECT @CMD='SELECT * INTO ##TEMP_TABLE FROM '+@TABLE_NAME+''
END
SELECT @CMD= 'SELECT '+@FLD+' INTO ##TMPTBL1 FROM ##TEMP_TABLE WHERE ' + @IDENTCOL + '='+CONVERT(VARCHAR(10),@COUNTER)